浏览代码

Merge remote-tracking branch 'origin/master' into test-framework

/Branch_batcher
Tim Cooper 8 年前
当前提交
582adf08
共有 126 个文件被更改,包括 8104 次插入655 次删除
  1. 4
      .gitmodules
  2. 285
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/DebugDisplay.cs
  3. 13
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/DebugDisplay.cs.hlsl
  4. 2
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/DebugDisplay.hlsl
  5. 12
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/Resources/DebugViewTiles.shader
  6. 200
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Editor/HDRenderPipelineInspector.cs
  7. 13
      Assets/ScriptableRenderPipeline/HDRenderPipeline/HDRenderPipeline.asset
  8. 86
      Assets/ScriptableRenderPipeline/HDRenderPipeline/HDRenderPipeline.cs
  9. 2
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/LightLoop.cs
  10. 5
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TileLightLoopProducer.cs
  11. 2
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/FeatureFlags.hlsl
  12. 115
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePass.cs
  13. 8
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePass.hlsl
  14. 11
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePassLoop.hlsl
  15. 19
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Editor/LitUI.cs
  16. 20
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.cs
  17. 31
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.cs.hlsl
  18. 316
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.hlsl
  19. 14
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.shader
  20. 2
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitData.hlsl
  21. 11
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitDataInternal.hlsl
  22. 10
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitProperties.hlsl
  23. 14
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitTessellation.shader
  24. 8
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Resources/CombineSubsurfaceScattering.shader
  25. 10
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/SubsurfaceScatteringProfile.cs
  26. 4
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/MaterialUtilities.hlsl
  27. 2
      Assets/ScriptableRenderPipeline/HDRenderPipeline/ShaderPass/ShaderPassForward.hlsl
  28. 1
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Utilities.cs
  29. 36
      Assets/ScriptableRenderPipeline/HDRenderPipeline/Wind/3DNoise.psd.meta
  30. 144
      Assets/ScriptableRenderPipeline/ShaderLibrary/AreaLighting.hlsl
  31. 19
      Assets/ScriptableRenderPipeline/ShaderLibrary/CommonLighting.hlsl
  32. 76
      Assets/ScriptableRenderPipeline/ShaderLibrary/Packing.hlsl
  33. 103
      Assets/ScriptableRenderPipeline/common/Camera/CameraSwitcher.cs
  34. 5
      Assets/ScriptableRenderPipeline/common/CubeToSpherical.shader
  35. 3
      Assets/ScriptableRenderPipeline/common/TextureCache.cs
  36. 28
      Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/DragonStatue.mat
  37. 900
      Assets/TestScenes/HDTest/HDRenderLoopTest.unity
  38. 3
      ProjectSettings/EditorBuildSettings.asset
  39. 96
      ProjectSettings/InputManager.asset
  40. 14
      ProjectSettings/ProjectSettings.asset
  41. 2
      ProjectSettings/QualitySettings.asset
  42. 1
      Assets/ScriptableRenderPipeline/ShaderGenerator/Editor/ShaderGeneratorMenu.cs
  43. 9
      Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile.meta
  44. 9
      Assets/ScriptableRenderPipeline/PostProcessing.meta
  45. 9
      Assets/ScriptableRenderPipeline/common/Debugging.meta
  46. 221
      Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/DragonStatueSpecular.mat
  47. 8
      Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/DragonStatueSpecular.mat.meta
  48. 610
      Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/Dragon_specular.psd
  49. 88
      Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/Dragon_specular.psd.meta
  50. 9
      Assets/TestScenes/HDTest/GraphicTest/SSS.meta
  51. 197
      Assets/TestScenes/HDTest/GraphicTest/Two Sided/Material/GroundLeaf_DoubleSidedFlipSSS.mat
  52. 8
      Assets/TestScenes/HDTest/GraphicTest/Two Sided/Material/GroundLeaf_DoubleSidedFlipSSS.mat.meta
  53. 8
      Assets/TestScenes/HDTest/NewBatcherBench1.unity.meta
  54. 9
      Assets/TestScenes/HDTest/NewBatcherTest.meta
  55. 37
      Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/FoliageSSSProfile.asset
  56. 9
      Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/FoliageSSSProfile.asset.meta
  57. 37
      Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/SkinSSSProfile.asset
  58. 9
      Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/SkinSSSProfile.asset.meta
  59. 288
      Assets/ScriptableRenderPipeline/common/Debugging/DebugActionManager.cs
  60. 12
      Assets/ScriptableRenderPipeline/common/Debugging/DebugActionManager.cs.meta
  61. 292
      Assets/ScriptableRenderPipeline/common/Debugging/DebugItemDrawer.cs
  62. 12
      Assets/ScriptableRenderPipeline/common/Debugging/DebugItemDrawer.cs.meta
  63. 267
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenu.cs
  64. 12
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenu.cs.meta
  65. 453
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuItemUI.cs
  66. 12
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuItemUI.cs.meta
  67. 194
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuManager.cs
  68. 12
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuManager.cs.meta
  69. 178
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUI.cs
  70. 12
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUI.cs.meta
  71. 57
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUpdater.cs
  72. 12
      Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUpdater.cs.meta
  73. 76
      Assets/ScriptableRenderPipeline/common/Debugging/Debugging.cs
  74. 9
      Assets/ScriptableRenderPipeline/common/Debugging/Editor.meta
  75. 12
      Assets/ScriptableRenderPipeline/common/Debugging/Editor/DebugMenuEditor.cs.meta
  76. 72
      Assets/ScriptableRenderPipeline/common/Debugging/Editor/DebugMenuEditor.cs
  77. 27
      Assets/TestScenes/HDTest/GraphicTest/SSS/Infinite-Scan_License.txt
  78. 8
      Assets/TestScenes/HDTest/GraphicTest/SSS/Infinite-Scan_License.txt.meta
  79. 178
      Assets/TestScenes/HDTest/GraphicTest/SSS/InifiniteRealityHead.mat
  80. 9
      Assets/TestScenes/HDTest/GraphicTest/SSS/InifiniteRealityHead.mat.meta
  81. 1001
      Assets/TestScenes/HDTest/GraphicTest/SSS/bump-lowRes.png
  82. 122
      Assets/TestScenes/HDTest/GraphicTest/SSS/bump-lowRes.png.meta
  83. 1001
      Assets/TestScenes/HDTest/GraphicTest/SSS/head.OBJ
  84. 148
      Assets/TestScenes/HDTest/GraphicTest/SSS/head.OBJ.meta
  85. 74
      Assets/TestScenes/HDTest/GraphicTest/SSS/lambertian.jpg.meta
  86. 9
      Assets/TestScenes/HDTest/NewBatcherTest/Prefabs.meta
  87. 82
      Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Capsule.prefab
  88. 9
      Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Capsule.prefab.meta
  89. 82
      Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cube.prefab
  90. 9
      Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cube.prefab.meta
  91. 82
      Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cylinder.prefab
  92. 9
      Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cylinder.prefab.meta

4
.gitmodules


[submodule "Assets/TestScenes/Big"]
path = Assets/TestScenes/Big
url = https://github.com/Unity-Technologies/ScriptableRenderLoopScenes
[submodule "Assets/ScriptableRenderPipeline/PostProcessing"]
path = Assets/ScriptableRenderPipeline/PostProcessing
url = https://github.com/Unity-Technologies/PostProcessing
branch = v2

285
Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/DebugDisplay.cs


using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

[GenerateHLSL]
public enum DebugDisplayMode
public enum DebugLightingMode
ViewMaterial,
DiffuseLighting,
SpecularLighting,
VisualizeCascade

public bool displayRenderingDebug = false;
public bool displayLightingDebug = false;
public DebugDisplayMode debugDisplayMode = DebugDisplayMode.None;
public bool IsDebugDisplayEnable()
private static bool isDebugViewMaterialInit = false;
public static GUIContent[] debugViewMaterialStrings = null;
public static int[] debugViewMaterialValues = null;
public static GUIContent[] debugViewEngineStrings = null;
public static int[] debugViewEngineValues = null;
public static GUIContent[] debugViewMaterialVaryingStrings = null;
public static int[] debugViewMaterialVaryingValues = null;
public static GUIContent[] debugViewMaterialGBufferStrings = null;
public static int[] debugViewMaterialGBufferValues = null;
public DebugDisplaySettings()
{
BuildDebugRepresentation();
}
public int GetDebugMaterialIndex()
{
return materialDebugSettings.GetDebugMaterialIndex();
}
public DebugLightingMode GetDebugLightingMode()
{
return lightingDebugSettings.debugLightingMode;
}
public bool IsDebugDisplayEnabled()
{
return materialDebugSettings.IsDebugDisplayEnabled() || lightingDebugSettings.IsDebugDisplayEnabled();
}
public bool IsDebugMaterialDisplayEnabled()
{
return materialDebugSettings.IsDebugDisplayEnabled();
}
public void SetDebugViewMaterial(int value)
{
if (value != 0)
lightingDebugSettings.debugLightingMode = DebugLightingMode.None;
materialDebugSettings.SetDebugViewMaterial(value);
}
public void SetDebugViewEngine(int value)
{
if (value != 0)
lightingDebugSettings.debugLightingMode = DebugLightingMode.None;
materialDebugSettings.SetDebugViewEngine(value);
}
public void SetDebugViewVarying(Attributes.DebugViewVarying value)
{
if (value != 0)
lightingDebugSettings.debugLightingMode = DebugLightingMode.None;
materialDebugSettings.SetDebugViewVarying(value);
}
public void SetDebugViewGBuffer(int value)
{
if (value != 0)
lightingDebugSettings.debugLightingMode = DebugLightingMode.None;
materialDebugSettings.SetDebugViewGBuffer(value);
}
public void SetDebugLightingMode(DebugLightingMode value)
{
if(value != 0)
materialDebugSettings.DisableMaterialDebug();
lightingDebugSettings.debugLightingMode = value;
}
public void RegisterDebug()
return debugDisplayMode != DebugDisplayMode.None;
DebugMenuManager.instance.AddDebugItem<float>("Display Stats", "Frame Rate", () => 1.0f / Time.deltaTime, null, true);
DebugMenuManager.instance.AddDebugItem<float>("Display Stats", "Frame Time", () => Time.deltaTime * 1000.0f, null, true);
DebugMenuManager.instance.AddDebugItem<int>("Material", "Material",() => materialDebugSettings.debugViewMaterial, (value) => SetDebugViewMaterial((int)value), false, new DebugItemDrawerIntEnum(DebugDisplaySettings.debugViewMaterialStrings, DebugDisplaySettings.debugViewMaterialValues));
DebugMenuManager.instance.AddDebugItem<int>("Material", "Engine",() => materialDebugSettings.debugViewEngine, (value) => SetDebugViewEngine((int)value), false, new DebugItemDrawerIntEnum(DebugDisplaySettings.debugViewEngineStrings, DebugDisplaySettings.debugViewEngineValues));
DebugMenuManager.instance.AddDebugItem<Attributes.DebugViewVarying>("Material", "Attributes",() => materialDebugSettings.debugViewVarying, (value) => SetDebugViewVarying((Attributes.DebugViewVarying)value));
DebugMenuManager.instance.AddDebugItem<int>("Material", "GBuffer",() => materialDebugSettings.debugViewGBuffer, (value) => SetDebugViewGBuffer((int)value), false, new DebugItemDrawerIntEnum(DebugDisplaySettings.debugViewMaterialGBufferStrings, DebugDisplaySettings.debugViewMaterialGBufferValues));
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, bool>("Enable Shadows", () => lightingDebugSettings.enableShadows, (value) => lightingDebugSettings.enableShadows = (bool)value);
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, ShadowMapDebugMode>("Shadow Debug Mode", () => lightingDebugSettings.shadowDebugMode, (value) => lightingDebugSettings.shadowDebugMode = (ShadowMapDebugMode)value);
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, uint>("Shadow Map Index", () => lightingDebugSettings.shadowMapIndex, (value) => lightingDebugSettings.shadowMapIndex = (uint)value);
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, DebugLightingMode>("Lighting Debug Mode", () => lightingDebugSettings.debugLightingMode, (value) => SetDebugLightingMode((DebugLightingMode)value));
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, bool>("Override Smoothness", () => lightingDebugSettings.overrideSmoothness, (value) => lightingDebugSettings.overrideSmoothness = (bool)value);
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, float>("Override Smoothness Value", () => lightingDebugSettings.overrideSmoothnessValue, (value) => lightingDebugSettings.overrideSmoothnessValue = (float)value, false, new DebugItemDrawFloatMinMax(0.0f, 1.0f));
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, Color>("Debug Lighting Albedo", () => lightingDebugSettings.debugLightingAlbedo, (value) => lightingDebugSettings.debugLightingAlbedo = (Color)value);
DebugMenuManager.instance.AddDebugItem<bool>("Lighting", "Display Sky Reflection", () => lightingDebugSettings.displaySkyReflection, (value) => lightingDebugSettings.displaySkyReflection = (bool)value);
DebugMenuManager.instance.AddDebugItem<LightingDebugMenu, float>("Sky Reflection Mipmap", () => lightingDebugSettings.skyReflectionMipmap, (value) => lightingDebugSettings.skyReflectionMipmap = (float)value, false, new DebugItemDrawFloatMinMax(0.0f, 1.0f));
DebugMenuManager.instance.AddDebugItem<bool>("Rendering", "Display Opaque",() => renderingDebugSettings.displayOpaqueObjects, (value) => renderingDebugSettings.displayOpaqueObjects = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>("Rendering", "Display Transparency",() => renderingDebugSettings.displayTransparentObjects, (value) => renderingDebugSettings.displayTransparentObjects = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>("Rendering", "Enable Distortion",() => renderingDebugSettings.enableDistortion, (value) => renderingDebugSettings.enableDistortion = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>("Rendering", "Enable Subsurface Scattering",() => renderingDebugSettings.enableSSS, (value) => renderingDebugSettings.enableSSS = (bool)value);
void FillWithProperties(Type type, GUIContent[] debugViewMaterialStrings, int[] debugViewMaterialValues, string strSubNameSpace, ref int index)
{
var attributes = type.GetCustomAttributes(true);
// Get attribute to get the start number of the value for the enum
var attr = attributes[0] as GenerateHLSL;
if (!attr.needParamDebug)
{
return;
}
var fields = type.GetFields();
var localIndex = 0;
foreach (var field in fields)
{
var fieldName = field.Name;
// Check if the display name have been override by the users
if (Attribute.IsDefined(field, typeof(SurfaceDataAttributes)))
{
var propertyAttr = (SurfaceDataAttributes[])field.GetCustomAttributes(typeof(SurfaceDataAttributes), false);
if (propertyAttr[0].displayName != "")
{
fieldName = propertyAttr[0].displayName;
}
}
fieldName = strSubNameSpace + fieldName;
debugViewMaterialStrings[index] = new GUIContent(fieldName);
debugViewMaterialValues[index] = attr.paramDefinesStart + (int)localIndex;
index++;
localIndex++;
}
}
void FillWithPropertiesEnum(Type type, GUIContent[] debugViewMaterialStrings, int[] debugViewMaterialValues, string prefix, ref int index)
{
var names = Enum.GetNames(type);
var localIndex = 0;
foreach (var value in Enum.GetValues(type))
{
var valueName = prefix + names[localIndex];
debugViewMaterialStrings[index] = new GUIContent(valueName);
debugViewMaterialValues[index] = (int)value;
index++;
localIndex++;
}
}
string GetSubNameSpaceName(Type type)
{
return type.Namespace.Substring(type.Namespace.LastIndexOf((".")) + 1) + "/";
}
void BuildDebugRepresentation()
{
if (!isDebugViewMaterialInit)
{
var varyingNames = Enum.GetNames(typeof(Attributes.DebugViewVarying));
debugViewMaterialVaryingStrings = new GUIContent[varyingNames.Length];
debugViewMaterialVaryingValues = new int[varyingNames.Length];
var gbufferNames = Enum.GetNames(typeof(Attributes.DebugViewGbuffer));
debugViewMaterialGBufferStrings = new GUIContent[gbufferNames.Length + typeof(Lit.BSDFData).GetFields().Length];
debugViewMaterialGBufferValues = new int[gbufferNames.Length + typeof(Lit.BSDFData).GetFields().Length];
var num = typeof(Builtin.BuiltinData).GetFields().Length * 2 // BuildtinData are duplicated for each material
+ typeof(Lit.SurfaceData).GetFields().Length
+ typeof(Unlit.SurfaceData).GetFields().Length
+ 1; // None
debugViewMaterialStrings = new GUIContent[num];
debugViewMaterialValues = new int[num];
num = typeof(Lit.BSDFData).GetFields().Length
+ typeof(Unlit.BSDFData).GetFields().Length
+ 1; // None
debugViewEngineStrings = new GUIContent[num];
debugViewEngineValues = new int[num];
// Special case for None since it cannot be inferred from SurfaceDAta/BuiltinData
debugViewMaterialStrings[0] = new GUIContent("None");
debugViewMaterialValues[0] = 0;
var index = 1;
// 0 is a reserved number and should not be used (allow to track error)
FillWithProperties(typeof(Builtin.BuiltinData), debugViewMaterialStrings, debugViewMaterialValues, GetSubNameSpaceName(typeof(Lit.SurfaceData)), ref index);
FillWithProperties(typeof(Lit.SurfaceData), debugViewMaterialStrings, debugViewMaterialValues, GetSubNameSpaceName(typeof(Lit.SurfaceData)), ref index);
FillWithProperties(typeof(Builtin.BuiltinData), debugViewMaterialStrings, debugViewMaterialValues, GetSubNameSpaceName(typeof(Unlit.SurfaceData)), ref index);
FillWithProperties(typeof(Unlit.SurfaceData), debugViewMaterialStrings, debugViewMaterialValues, GetSubNameSpaceName(typeof(Unlit.SurfaceData)), ref index);
// Engine
debugViewEngineStrings[0] = new GUIContent("None");
debugViewEngineValues[0] = 0;
index = 1;
FillWithProperties(typeof(Lit.BSDFData), debugViewEngineStrings, debugViewEngineValues, GetSubNameSpaceName(typeof(Lit.BSDFData)), ref index);
FillWithProperties(typeof(Unlit.BSDFData), debugViewEngineStrings, debugViewEngineValues, GetSubNameSpaceName(typeof(Unlit.BSDFData)), ref index);
index = 0;
FillWithPropertiesEnum(typeof(Attributes.DebugViewVarying), debugViewMaterialVaryingStrings, debugViewMaterialVaryingValues, "", ref index);
index = 0;
FillWithPropertiesEnum(typeof(Attributes.DebugViewGbuffer), debugViewMaterialGBufferStrings, debugViewMaterialGBufferValues, "", ref index);
FillWithProperties(typeof(Lit.BSDFData), debugViewMaterialGBufferStrings, debugViewMaterialGBufferValues, "", ref index);
isDebugViewMaterialInit = true;
}
}
}
namespace Attributes

public enum DebugViewVarying
{
None = 0,
Texcoord0 = 1,
Texcoord1,
Texcoord2,

[GenerateHLSL]
public enum DebugViewGbuffer
{
None = 0,
Depth = DebugViewVarying.VertexColorAlpha + 1,
BakeDiffuseLightingWithAlbedoPlusEmissive,
}

public class MaterialDebugSettings
{
public int debugViewMaterial = 0;
public int debugViewMaterial { get { return m_DebugViewMaterial; } }
public int debugViewEngine { get { return m_DebugViewEngine; } }
public Attributes.DebugViewVarying debugViewVarying { get { return m_DebugViewVarying; } }
public int debugViewGBuffer { get { return m_DebugViewGBuffer; } }
int m_DebugViewMaterial = 0; // No enum there because everything is generated from materials.
int m_DebugViewEngine = 0; // No enum there because everything is generated from BSDFData
Attributes.DebugViewVarying m_DebugViewVarying = Attributes.DebugViewVarying.None;
int m_DebugViewGBuffer = 0; // Can't use GBuffer enum here because the values are actually split between this enum and values from Lit.BSDFData
public int GetDebugMaterialIndex()
{
// This value is used in the shader for the actual debug display.
// There is only one uniform parameter for that so we just add all of them
// They are all mutually exclusive so return the sum will return the right index.
return m_DebugViewGBuffer + m_DebugViewMaterial + m_DebugViewEngine + (int)m_DebugViewVarying;
}
public void DisableMaterialDebug()
{
m_DebugViewMaterial = 0;
m_DebugViewEngine = 0;
m_DebugViewVarying = Attributes.DebugViewVarying.None;
m_DebugViewGBuffer = 0;
}
public void SetDebugViewMaterial(int value)
{
if (value != 0)
DisableMaterialDebug();
m_DebugViewMaterial = value;
}
public void SetDebugViewEngine(int value)
{
if (value != 0)
DisableMaterialDebug();
m_DebugViewEngine = value;
}
public void SetDebugViewVarying(Attributes.DebugViewVarying value)
{
if (value != 0)
DisableMaterialDebug();
m_DebugViewVarying = value;
}
public void SetDebugViewGBuffer(int value)
{
if (value != 0)
DisableMaterialDebug();
m_DebugViewGBuffer = value;
}
public bool IsDebugDisplayEnabled()
{
return (m_DebugViewEngine != 0 || m_DebugViewMaterial != 0 || m_DebugViewVarying != Attributes.DebugViewVarying.None || m_DebugViewGBuffer != 0);
}
}
[Serializable]

[Serializable]
public class LightingDebugSettings
{
public bool IsDebugDisplayEnabled()
{
return debugLightingMode != DebugLightingMode.None;
}
public DebugLightingMode debugLightingMode = DebugLightingMode.None;
public bool overrideSmoothness = false;
public float overrideSmoothnessValue = 0.5f;
public Color debugLightingAlbedo = new Color(0.5f, 0.5f, 0.5f);

13
Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/DebugDisplay.cs.hlsl


#ifndef DEBUGDISPLAY_CS_HLSL
#define DEBUGDISPLAY_CS_HLSL
//
// UnityEngine.Experimental.Rendering.HDPipeline.DebugDisplayMode: static fields
// UnityEngine.Experimental.Rendering.HDPipeline.DebugLightingMode: static fields
#define DEBUGDISPLAYMODE_NONE (0)
#define DEBUGDISPLAYMODE_VIEW_MATERIAL (1)
#define DEBUGDISPLAYMODE_DIFFUSE_LIGHTING (2)
#define DEBUGDISPLAYMODE_SPECULAR_LIGHTING (3)
#define DEBUGDISPLAYMODE_VISUALIZE_CASCADE (4)
#define DEBUGLIGHTINGMODE_NONE (0)
#define DEBUGLIGHTINGMODE_DIFFUSE_LIGHTING (1)
#define DEBUGLIGHTINGMODE_SPECULAR_LIGHTING (2)
#define DEBUGLIGHTINGMODE_VISUALIZE_CASCADE (3)
#define DEBUGVIEWVARYING_NONE (0)
#define DEBUGVIEWVARYING_TEXCOORD0 (1)
#define DEBUGVIEWVARYING_TEXCOORD1 (2)
#define DEBUGVIEWVARYING_TEXCOORD2 (3)

//
// UnityEngine.Experimental.Rendering.HDPipeline.Attributes.DebugViewGbuffer: static fields
//
#define DEBUGVIEWGBUFFER_NONE (0)
#define DEBUGVIEWGBUFFER_DEPTH (10)
#define DEBUGVIEWGBUFFER_BAKE_DIFFUSE_LIGHTING_WITH_ALBEDO_PLUS_EMISSIVE (11)

2
Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/DebugDisplay.hlsl


#include "DebugDisplay.cs.hlsl"
// Set of parameters available when switching to debug shader mode
int _DebugDisplayMode; // Match enum DebugDisplayMode
int _DebugLightingMode; // Match enum DebugLightingMode
int _DebugViewMaterial; // Contain the id (define in various materialXXX.cs.hlsl) of the property to display
float4 _DebugLightingAlbedo; // xyz = albedo for diffuse, w unused
float4 _DebugLightingSmoothness; // x == bool override, y == override value

12
Assets/ScriptableRenderPipeline/HDRenderPipeline/Debug/Resources/DebugViewTiles.shader


UpdatePositionInput(depth, _InvViewProjMatrix, _ViewProjMatrix, posInput);
int2 pixelCoord = posInput.unPositionSS.xy;
int2 tileCoord = (float2)pixelCoord / TILE_SIZE;
int2 mouseTileCoord = _MousePixelCoord / TILE_SIZE;
int2 offsetInTile = pixelCoord - tileCoord * TILE_SIZE;
int2 tileCoord = (float2)pixelCoord / GetTileSize();
int2 mouseTileCoord = _MousePixelCoord / GetTileSize();
int2 offsetInTile = pixelCoord - tileCoord * GetTileSize();
int n = 0;
#ifdef SHOW_LIGHT_CATEGORIES

// Tile overlap counter
if (n >= 0)
{
result = OverlayHeatMap(int2(posInput.unPositionSS.xy) & (TILE_SIZE - 1), n);
result = OverlayHeatMap(int2(posInput.unPositionSS.xy) & (GetTileSize() - 1), n);
}
#ifdef SHOW_LIGHT_CATEGORIES

bool border = any(offsetInTile == 0 || offsetInTile == TILE_SIZE - 1);
bool border = any(offsetInTile == 0 || offsetInTile == GetTileSize() - 1);
float4 result2 = float4(1.0, 1.0, 1.0, border ? 1.0 : 0.5);
result = AlphaBlend(result, result2);
}

if (tileCoord.y < LIGHTCATEGORY_COUNT && tileCoord.x < maxLights + 3)
{
PositionInputs mousePosInput = GetPositionInput(_MousePixelCoord, _ScreenSize.zw, uint2(0,0));
PositionInputs mousePosInput = GetPositionInput(_MousePixelCoord, _ScreenSize.zw, mouseTileCoord);
float depthMouse = LOAD_TEXTURE2D(_MainDepthTexture, mousePosInput.unPositionSS).x;
UpdatePositionInput(depthMouse, _InvViewProjMatrix, _ViewProjMatrix, mousePosInput);

200
Assets/ScriptableRenderPipeline/HDRenderPipeline/Editor/HDRenderPipelineInspector.cs


public readonly GUIContent skyParams = new GUIContent("Sky Settings");
// Debug Display Settings
public readonly GUIContent debugDisplayMode = new GUIContent("Debug Display Mode");
public readonly GUIContent debugging = new GUIContent("Debugging");
public readonly GUIContent debugOverlayRatio = new GUIContent("Overlay Ratio");

public bool isDebugViewMaterialInit = false;
public GUIContent[] debugViewMaterialStrings = null;
public int[] debugViewMaterialValues = null;
public readonly GUIContent debugViewEngine = new GUIContent("DebugView Engine", "Display various properties of Materials.");
public readonly GUIContent debugViewMaterialVarying = new GUIContent("DebugView Attributes", "Display varying input of Materials.");
public readonly GUIContent debugViewMaterialGBuffer = new GUIContent("DebugView GBuffer", "Display GBuffer properties.");
// Rendering Debug
public readonly GUIContent renderingDebugSettings = new GUIContent("Rendering Debug");

// Lighting Debug
public readonly GUIContent lightingDebugSettings = new GUIContent("Lighting Debug");
public readonly GUIContent shadowDebugEnable = new GUIContent("Enable Shadows");
public readonly GUIContent lightingVisualizationMode = new GUIContent("Lighting Debug Mode");
public readonly GUIContent[] debugViewLightingStrings = { new GUIContent("None"), new GUIContent("Diffuse Lighting"), new GUIContent("Specular Lighting"), new GUIContent("Visualize Cascades") };
public readonly int[] debugViewLightingValues = { (int)DebugLightingMode.None, (int)DebugLightingMode.DiffuseLighting, (int)DebugLightingMode.SpecularLighting, (int)DebugLightingMode.VisualizeCascade };
public readonly GUIContent shadowDebugVisualizationMode = new GUIContent("Shadow Maps Debug Mode");
public readonly GUIContent shadowDebugVisualizeShadowIndex = new GUIContent("Visualize Shadow Index");
public readonly GUIContent lightingDebugOverrideSmoothness = new GUIContent("Override Smoothness");

}
// Display Debug
SerializedProperty m_DebugDisplayMode = null;
// Material Debug
SerializedProperty m_MaterialDebugMode = null;
// Rendering Debug
SerializedProperty m_DisplayOpaqueObjects = null;
SerializedProperty m_DisplayTransparentObjects = null;

private void InitializeProperties()
{
// DebugDisplay debug
m_DebugDisplayMode = FindProperty(x => x.debugDisplaySettings.debugDisplayMode);
// Material debug
m_MaterialDebugMode = FindProperty(x => x.debugDisplaySettings.materialDebugSettings.debugViewMaterial);
// Rendering debug
m_DisplayOpaqueObjects = FindProperty(x => x.debugDisplaySettings.renderingDebugSettings.displayOpaqueObjects);
m_DisplayTransparentObjects = FindProperty(x => x.debugDisplaySettings.renderingDebugSettings.displayTransparentObjects);

return serializedObject.FindProperty(path);
}
string GetSubNameSpaceName(Type type)
{
return type.Namespace.Substring(type.Namespace.LastIndexOf((".")) + 1) + "/";
}
void FillWithProperties(Type type, GUIContent[] debugViewMaterialStrings, int[] debugViewMaterialValues, bool isBSDFData, string strSubNameSpace, ref int index)
{
var attributes = type.GetCustomAttributes(true);
// Get attribute to get the start number of the value for the enum
var attr = attributes[0] as GenerateHLSL;
if (!attr.needParamDebug)
{
return;
}
var fields = type.GetFields();
var localIndex = 0;
foreach (var field in fields)
{
var fieldName = field.Name;
// Check if the display name have been override by the users
if (Attribute.IsDefined(field, typeof(SurfaceDataAttributes)))
{
var propertyAttr = (SurfaceDataAttributes[])field.GetCustomAttributes(typeof(SurfaceDataAttributes), false);
if (propertyAttr[0].displayName != "")
{
fieldName = propertyAttr[0].displayName;
}
}
fieldName = (isBSDFData ? "Engine/" : "") + strSubNameSpace + fieldName;
debugViewMaterialStrings[index] = new GUIContent(fieldName);
debugViewMaterialValues[index] = attr.paramDefinesStart + (int)localIndex;
index++;
localIndex++;
}
}
void FillWithPropertiesEnum(Type type, GUIContent[] debugViewMaterialStrings, int[] debugViewMaterialValues, string prefix, bool isBSDFData, ref int index)
{
var names = Enum.GetNames(type);
var localIndex = 0;
foreach (var value in Enum.GetValues(type))
{
var valueName = (isBSDFData ? "Engine/" : "" + prefix) + names[localIndex];
debugViewMaterialStrings[index] = new GUIContent(valueName);
debugViewMaterialValues[index] = (int)value;
index++;
localIndex++;
}
}
static void HackSetDirty(RenderPipelineAsset asset)
{
EditorUtility.SetDirty(asset);

// Debug Display settings
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_DebugDisplayMode, styles.debugDisplayMode);
if ((DebugDisplayMode)m_DebugDisplayMode.intValue == DebugDisplayMode.ViewMaterial)
{
MaterialDebugSettingsUI(renderContext);
}
else
{
LightingDebugSettingsUI(renderContext, renderpipelineInstance);
}
MaterialDebugSettingsUI(renderContext);
LightingDebugSettingsUI(renderContext, renderpipelineInstance);
EditorGUILayout.Space();

private void MaterialDebugSettingsUI(HDRenderPipeline renderContext)
{
HDRenderPipeline hdPipe = target as HDRenderPipeline;
bool dirty = false;
if (!styles.isDebugViewMaterialInit)
int value = EditorGUILayout.IntPopup(styles.debugViewMaterial, hdPipe.debugDisplaySettings.materialDebugSettings.debugViewMaterial, DebugDisplaySettings.debugViewMaterialStrings, DebugDisplaySettings.debugViewMaterialValues);
if (EditorGUI.EndChangeCheck())
var varyingNames = Enum.GetNames(typeof(Attributes.DebugViewVarying));
var gbufferNames = Enum.GetNames(typeof(Attributes.DebugViewGbuffer));
var num = varyingNames.Length
+ gbufferNames.Length
+ typeof(Builtin.BuiltinData).GetFields().Length * 2 // BuildtinData are duplicated for each material
+ typeof(Lit.SurfaceData).GetFields().Length
+ typeof(Lit.BSDFData).GetFields().Length
+ typeof(Unlit.SurfaceData).GetFields().Length
+ typeof(Unlit.BSDFData).GetFields().Length;
styles.debugViewMaterialStrings = new GUIContent[num];
styles.debugViewMaterialValues = new int[num];
var index = 0;
// 0 is a reserved number and should not be used (allow to track error)
FillWithPropertiesEnum(typeof(Attributes.DebugViewVarying), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, GetSubNameSpaceName(typeof(Attributes.DebugViewVarying)), false, ref index);
FillWithProperties(typeof(Builtin.BuiltinData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, GetSubNameSpaceName(typeof(Lit.SurfaceData)), ref index);
FillWithProperties(typeof(Lit.SurfaceData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, GetSubNameSpaceName(typeof(Lit.SurfaceData)), ref index);
FillWithProperties(typeof(Builtin.BuiltinData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, GetSubNameSpaceName(typeof(Unlit.SurfaceData)), ref index);
FillWithProperties(typeof(Unlit.SurfaceData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, false, GetSubNameSpaceName(typeof(Unlit.SurfaceData)), ref index);
// Engine
FillWithPropertiesEnum(typeof(Attributes.DebugViewGbuffer), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, "", true, ref index);
FillWithProperties(typeof(Lit.BSDFData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, true, "", ref index);
FillWithProperties(typeof(Unlit.BSDFData), styles.debugViewMaterialStrings, styles.debugViewMaterialValues, true, "", ref index);
hdPipe.debugDisplaySettings.SetDebugViewMaterial(value);
dirty = true;
}
styles.isDebugViewMaterialInit = true;
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.IntPopup(styles.debugViewEngine, hdPipe.debugDisplaySettings.materialDebugSettings.debugViewEngine, DebugDisplaySettings.debugViewEngineStrings, DebugDisplaySettings.debugViewEngineValues);
if (EditorGUI.EndChangeCheck())
{
hdPipe.debugDisplaySettings.SetDebugViewEngine(value);
dirty = true;
EditorGUI.showMixedValue = m_MaterialDebugMode.hasMultipleDifferentValues;
m_MaterialDebugMode.intValue = EditorGUILayout.IntPopup(styles.debugViewMaterial, m_MaterialDebugMode.intValue, styles.debugViewMaterialStrings, styles.debugViewMaterialValues);
EditorGUI.showMixedValue = false;
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.IntPopup(styles.debugViewMaterialVarying, (int)hdPipe.debugDisplaySettings.materialDebugSettings.debugViewVarying, DebugDisplaySettings.debugViewMaterialVaryingStrings, DebugDisplaySettings.debugViewMaterialVaryingValues);
if (EditorGUI.EndChangeCheck())
{
hdPipe.debugDisplaySettings.SetDebugViewVarying((Attributes.DebugViewVarying)value);
dirty = true;
}
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.IntPopup(styles.debugViewMaterialGBuffer, (int)hdPipe.debugDisplaySettings.materialDebugSettings.debugViewGBuffer, DebugDisplaySettings.debugViewMaterialGBufferStrings, DebugDisplaySettings.debugViewMaterialGBufferValues);
HackSetDirty(renderContext); // Repaint
hdPipe.debugDisplaySettings.SetDebugViewGBuffer(value);
dirty = true;
if(dirty)
HackSetDirty(renderContext); // Repaint
EditorGUI.indentLevel--;
}

if (!m_ShowLightingDebug.boolValue)
return;
EditorGUI.BeginChangeCheck();
HDRenderPipeline hdPipe = target as HDRenderPipeline;
bool dirty = false;
EditorGUI.BeginChangeCheck();
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_DebugShadowEnabled, styles.shadowDebugEnable);
EditorGUILayout.PropertyField(m_ShadowDebugMode, styles.shadowDebugVisualizationMode);

EditorGUILayout.IntSlider(m_ShadowDebugShadowMapIndex, 0, renderpipelineInstance.GetCurrentShadowCount() - 1, styles.shadowDebugVisualizeShadowIndex);
}
}
if (EditorGUI.EndChangeCheck())
{
dirty = true;
}
if (!m_DebugDisplayMode.hasMultipleDifferentValues)
EditorGUI.BeginChangeCheck();
int value = EditorGUILayout.IntPopup(styles.lightingVisualizationMode, (int)hdPipe.debugDisplaySettings.lightingDebugSettings.debugLightingMode, styles.debugViewLightingStrings, styles.debugViewLightingValues);
if (EditorGUI.EndChangeCheck())
if ((DebugDisplayMode)m_DebugDisplayMode.intValue == DebugDisplayMode.DiffuseLighting)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_LightingDebugAlbedo, styles.lightingDebugAlbedo);
EditorGUI.indentLevel--;
}
hdPipe.debugDisplaySettings.SetDebugLightingMode((DebugLightingMode)value);
dirty = true;
}
if ((DebugDisplayMode)m_DebugDisplayMode.intValue == DebugDisplayMode.SpecularLighting)
EditorGUI.BeginChangeCheck();
if (hdPipe.debugDisplaySettings.GetDebugLightingMode() == DebugLightingMode.DiffuseLighting)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_LightingDebugAlbedo, styles.lightingDebugAlbedo);
EditorGUI.indentLevel--;
}
if (hdPipe.debugDisplaySettings.GetDebugLightingMode() == DebugLightingMode.SpecularLighting)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_LightingDebugOverrideSmoothness, styles.lightingDebugOverrideSmoothness);
if (!m_LightingDebugOverrideSmoothness.hasMultipleDifferentValues && m_LightingDebugOverrideSmoothness.boolValue == true)
EditorGUILayout.PropertyField(m_LightingDebugOverrideSmoothness, styles.lightingDebugOverrideSmoothness);
if (!m_LightingDebugOverrideSmoothness.hasMultipleDifferentValues && m_LightingDebugOverrideSmoothness.boolValue == true)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_LightingDebugOverrideSmoothnessValue, styles.lightingDebugOverrideSmoothnessValue);
EditorGUI.indentLevel--;
}
EditorGUILayout.PropertyField(m_LightingDebugOverrideSmoothnessValue, styles.lightingDebugOverrideSmoothnessValue);
EditorGUI.indentLevel--;
}
EditorGUILayout.PropertyField(m_LightingDebugDisplaySkyReflection, styles.lightingDisplaySkyReflection);

if (EditorGUI.EndChangeCheck())
{
dirty = true;
}
if(dirty)
}
}
private void SettingsUI(HDRenderPipeline renderContext)

13
Assets/ScriptableRenderPipeline/HDRenderPipeline/HDRenderPipeline.asset


displayLightingDebug: 0
debugDisplayMode: 0
materialDebugSettings:
debugViewMaterial: 1
debugViewMaterial: 1002
lightingDebugSettings:
enableShadows: 1
shadowDebugMode: 0

useForwardRenderingOnly: 0
useDepthPrepass: 0
sssSettings:
numProfiles: 0
profiles: []
numProfiles: 7
profiles:
- {fileID: 11400000, guid: d6ee4403015766f4093158d69216c0bf, type: 2}
- {fileID: 11400000, guid: 906339bac2066fc4aa22a3652e1283ef, type: 2}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
m_ShadowSettings:
enabled: 1
shadowAtlasWidth: 4096

86
Assets/ScriptableRenderPipeline/HDRenderPipeline/HDRenderPipeline.cs


using UnityEngine.Rendering;
using System;
using System.Linq;
using UnityEngine.Experimental.PostProcessing;
using UnityEngine.Experimental.Rendering.HDPipeline.TilePass;
#if UNITY_EDITOR

Vector4 debugAlbedo = new Vector4(lightingDebugSettings.debugLightingAlbedo.r, lightingDebugSettings.debugLightingAlbedo.g, lightingDebugSettings.debugLightingAlbedo.b, 0.0f);
Vector4 debugSmoothness = new Vector4(lightingDebugSettings.overrideSmoothness ? 1.0f : 0.0f, lightingDebugSettings.overrideSmoothnessValue, 0.0f, 0.0f);
Shader.SetGlobalInt("_DebugDisplayMode", (int)debugDisplaySettings.debugDisplayMode);
Shader.SetGlobalInt("_DebugViewMaterial", (int)debugDisplaySettings.materialDebugSettings.debugViewMaterial);
Shader.SetGlobalInt("_DebugViewMaterial", (int)debugDisplaySettings.GetDebugMaterialIndex());
Shader.SetGlobalInt("_DebugLightingMode", (int)debugDisplaySettings.GetDebugLightingMode());
Shader.SetGlobalVector("_DebugLightingAlbedo", debugAlbedo);
Shader.SetGlobalVector("_DebugLightingSmoothness", debugSmoothness);
}

debugDisplaySettings.OnValidate();
sssSettings.OnValidate();
}
void OnEnable()
{
debugDisplaySettings.RegisterDebug();
}
}
[Serializable]

private RenderTargetIdentifier m_CameraDepthStencilBufferRT;
private RenderTargetIdentifier m_CameraDepthStencilBufferCopyRT;
// Post-processing context (recycled on every frame to avoid GC alloc)
readonly PostProcessRenderContext m_PostProcessContext;
// Detect when windows size is changing
int m_CurrentWidth;
int m_CurrentHeight;

m_CameraFilteringBufferRT = new RenderTargetIdentifier(m_CameraFilteringBuffer);
m_FilterSubsurfaceScattering = Utilities.CreateEngineMaterial("Hidden/HDRenderPipeline/CombineSubsurfaceScattering");
m_FilterSubsurfaceScattering.DisableKeyword("FILTER_HORIZONTAL_AND_COMBINE");
m_FilterSubsurfaceScattering.DisableKeyword("SSS_FILTER_HORIZONTAL_AND_COMBINE");
m_FilterAndCombineSubsurfaceScattering.EnableKeyword("FILTER_HORIZONTAL_AND_COMBINE");
m_FilterAndCombineSubsurfaceScattering.EnableKeyword("SSS_FILTER_HORIZONTAL_AND_COMBINE");
m_FilterAndCombineSubsurfaceScattering.SetFloat("_DstBlend", (float)BlendMode.One);
InitializeDebugMaterials();

m_SkyManager.Build();
m_SkyManager.skySettings = owner.skySettingsToUse;
m_PostProcessContext = new PostProcessRenderContext();
}
void InitializeDebugMaterials()

private void CopyDepthBufferIfNeeded(ScriptableRenderContext renderContext)
{
var cmd = new CommandBuffer();
var cmd = new CommandBuffer() { name = NeedDepthBufferCopy() ? "Copy DepthBuffer" : "Set DepthBuffer"};
if (NeedDepthBufferCopy())
{
using (new Utilities.ProfilingSample("Copy depth-stencil buffer", renderContext))

// select the most main camera!
Camera camera = cameras.OrderByDescending(x => x.tag == "MainCamera").FirstOrDefault();
if (camera == null)
return;
if (camera == null)
{
renderContext.Submit();
return;
}
if (!CullResults.GetCullingParameters(camera, out cullingParams))
return;
if (!CullResults.GetCullingParameters(camera, out cullingParams))
{
renderContext.Submit();
return;
}
m_ShadowPass.UpdateCullingParameters(ref cullingParams);

CopyDepthBufferIfNeeded(renderContext);
}
if (debugDisplaySettings.debugDisplayMode == DebugDisplayMode.ViewMaterial)
if (debugDisplaySettings.IsDebugMaterialDisplayEnabled())
{
RenderDebugViewMaterial(cullResults, hdCamera, renderContext);
}

RenderForward(cullResults, camera, renderContext, true); // Render deferred or forward opaque
RenderForwardOnlyOpaque(cullResults, camera, renderContext);
RenderLightingDebug(hdCamera, renderContext, m_CameraColorBufferRT);
// If full forward rendering, we did just rendered everything, so we can copy the depth buffer
// If Deferred nothing needs copying anymore.
if (m_Owner.renderingSettings.useForwardRenderingOnly)

// Instead we chose to apply distortion at the end after we cumulate distortion vector and desired blurriness. This
RenderDistortion(cullResults, camera, renderContext);
FinalPass(camera, renderContext);
RenderPostProcesses(camera, renderContext);
}
}

return;
}
string passName = debugDisplaySettings.IsDebugDisplayEnable() ? "GBufferDebugDisplay" : "GBuffer";
string passName = debugDisplaySettings.IsDebugDisplayEnabled() ? "GBufferDebugDisplay" : "GBuffer";
using (new Utilities.ProfilingSample(passName, renderContext))
{

return m_SkyManager.ExportSkyToTexture();
}
void RenderLightingDebug(HDCamera camera, ScriptableRenderContext renderContext, RenderTargetIdentifier colorBuffer)
{
if (m_LightLoop != null)
m_LightLoop.RenderLightingDebug(camera, renderContext, colorBuffer);
}
void RenderForward(CullResults cullResults, Camera camera, ScriptableRenderContext renderContext, bool renderOpaque)
{
// TODO: Currently we can't render opaque object forward when deferred is enabled

string passName = debugDisplaySettings.IsDebugDisplayEnable() ? "ForwardDisplayDebug" : "Forward";
string passName = debugDisplaySettings.IsDebugDisplayEnabled() ? "ForwardDisplayDebug" : "Forward";
using (new Utilities.ProfilingSample(passName, renderContext))
{

// Render material that are forward opaque only (like eye), this include unlit material
void RenderForwardOnlyOpaque(CullResults cullResults, Camera camera, ScriptableRenderContext renderContext)
{
string passName = debugDisplaySettings.IsDebugDisplayEnable() ? "ForwardOnlyOpaqueDisplayDebug" : "ForwardOnlyOpaque";
string passName = debugDisplaySettings.IsDebugDisplayEnabled() ? "ForwardOnlyOpaqueDisplayDebug" : "ForwardOnlyOpaque";
using (new Utilities.ProfilingSample(passName, renderContext))
{

}
}
void FinalPass(Camera camera, ScriptableRenderContext renderContext)
void RenderPostProcesses(Camera camera, ScriptableRenderContext renderContext)
using (new Utilities.ProfilingSample("Final", renderContext))
using (new Utilities.ProfilingSample("Post-processing", renderContext))
// All of this is temporary, sub-optimal and quickly hacked together but is necessary
// for artists to do lighting work until the fully-featured framework is ready
var postProcessLayer = camera.GetComponent<PostProcessLayer>();
var cmd = new CommandBuffer { name = "" };
var localPostProcess = camera.GetComponent<PostProcessingSRP>();
if (postProcessLayer != null && postProcessLayer.enabled)
{
cmd.SetGlobalTexture("_CameraDepthTexture", GetDepthTexture());
bool localActive = localPostProcess != null && localPostProcess.enabled;
var context = m_PostProcessContext;
context.Reset();
context.source = m_CameraColorBufferRT;
context.destination = BuiltinRenderTextureType.CameraTarget;
context.command = cmd;
context.camera = camera;
context.sourceFormat = RenderTextureFormat.ARGBHalf; // ?
context.flip = true;
if (!localActive)
postProcessLayer.Render(context);
}
else
var cmd = new CommandBuffer { name = "" };
renderContext.ExecuteCommandBuffer(cmd);
cmd.Dispose();
return;
localPostProcess.Render(camera, renderContext, m_CameraColorBufferRT, BuiltinRenderTextureType.CameraTarget);
renderContext.ExecuteCommandBuffer(cmd);
cmd.Dispose();
}
}

2
Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/LightLoop.cs


public virtual void RenderForward(Camera camera, ScriptableRenderContext renderContext, bool renderOpaque) {}
public virtual void RenderLightingDebug(HDCamera hdCamera, ScriptableRenderContext renderContext, RenderTargetIdentifier colorBuffer) {}
public Light GetCurrentSunLight() { return m_CurrentSunLight; }
}
}

5
Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TileLightLoopProducer.cs


[Range(0.0f, 1.0f)]
public float specularGlobalDimmer = 1.0f;
public enum TileDebug : int { None = 0, Punctual = 1, Area = 2, AreaAndPunctual = 3, Environment = 4, EnvironmentAndPunctual = 5, EnvironmentAndArea = 6, EnvironmentAndAreaAndPunctual = 7, FeatureVariants = 8 };
public enum TileDebug : int { None = 0, Punctual = 1, Area = 2, AreaAndPunctual = 3, Projector = 4, ProjectorAndPunctual = 5, ProjectorAndArea = 6, ProjectorAndAreaAndPunctual = 7,
Environment = 8, EnvironmentAndPunctual = 9, EnvironmentAndArea = 10, EnvironemntAndAreaAndPunctual = 11,
EnvironmentAndProjector = 12, EnvironmentAndProjectorAndPunctual = 13, EnvironmentAndProjectorAndArea = 14, EnvironmentAndProjectorAndAreaAndPunctual = 15,
FeatureVariants = 16 }; //TODO: we should probably make this checkboxes
public TileDebug tileDebugByCategory;
public static TileSettings defaultSettings = new TileSettings

2
Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/FeatureFlags.hlsl


#ifndef __FEATURE_FLAGS_H__
#define __FEATURE_FLAGS_H__
static const uint FEATURE_FLAG_ALL_MATERIALS = FEATURE_FLAG_MATERIAL_LIT_STANDARD | FEATURE_FLAG_MATERIAL_LIT_SSS | FEATURE_FLAG_MATERIAL_LIT_CLEAR_COAT | FEATURE_FLAG_MATERIAL_LIT_SPECULAR | FEATURE_FLAG_MATERIAL_LIT_ANISO;
static const uint FEATURE_FLAG_ALL_MATERIALS = FEATURE_FLAG_MATERIAL_LIT_STANDARD | FEATURE_FLAG_MATERIAL_LIT_SSS | FEATURE_FLAG_MATERIAL_LIT_SPECULAR | FEATURE_FLAG_MATERIAL_LIT_ANISO;
static const uint FeatureVariantFlags[NUM_FEATURE_VARIANTS] =
{

115
Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePass.cs


Utilities.SetKeyword(m_SingleDeferredMaterialMRT, "DEBUG_DISPLAY", debugDisplayEnable);
}
public override void RenderDeferredLighting(HDCamera hdCamera, ScriptableRenderContext renderContext,
DebugDisplaySettings debugDisplaySettings,
RenderTargetIdentifier[] colorBuffers, RenderTargetIdentifier depthStencilBuffer, RenderTargetIdentifier depthStencilTexture,
bool outputSplitLightingForSSS)
public override void RenderLightingDebug(HDCamera hdCamera, ScriptableRenderContext renderContext, RenderTargetIdentifier colorBuffer)
var bUseClusteredForDeferred = !usingFptl;
if (m_PassSettings.tileDebugByCategory == TileLightLoopProducer.TileSettings.TileDebug.None)
return;
var cmd = new CommandBuffer();
cmd.name = "Tiled Lighting Debug";
bool bUseClusteredForDeferred = !usingFptl;
int w = hdCamera.camera.pixelWidth;
int h = hdCamera.camera.pixelHeight;
int numTilesX = (w + 15) / 16;
int numTilesY = (h + 15) / 16;
int numTiles = numTilesX * numTilesY;
Vector2 mousePixelCoord = Input.mousePosition;
#if UNITY_EDITOR
if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)

}
#endif
// Debug tiles
PushGlobalParams(hdCamera.camera, renderContext, null, 0);
if (m_PassSettings.tileDebugByCategory == TileLightLoopProducer.TileSettings.TileDebug.FeatureVariants)
{
if (GetFeatureVariantsEnabled())
{
// featureVariants
Utilities.SetupMaterialHDCamera(hdCamera, m_DebugViewTilesMaterial);
m_DebugViewTilesMaterial.SetInt("_NumTiles", numTiles);
m_DebugViewTilesMaterial.SetInt("_ViewTilesFlags", (int)m_PassSettings.tileDebugByCategory);
m_DebugViewTilesMaterial.SetVector("_MousePixelCoord", mousePixelCoord);
m_DebugViewTilesMaterial.SetBuffer("g_TileList", s_TileList);
m_DebugViewTilesMaterial.SetBuffer("g_DispatchIndirectBuffer", s_DispatchIndirectBuffer);
m_DebugViewTilesMaterial.EnableKeyword(bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.DisableKeyword(!bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.DisableKeyword("SHOW_LIGHT_CATEGORIES");
m_DebugViewTilesMaterial.EnableKeyword("SHOW_FEATURE_VARIANTS");
cmd.SetRenderTarget(colorBuffer);
cmd.DrawProcedural(Matrix4x4.identity, m_DebugViewTilesMaterial, 0, MeshTopology.Triangles, numTiles * 6);
}
}
else if (m_PassSettings.tileDebugByCategory != TileLightLoopProducer.TileSettings.TileDebug.None)
{
// lightCategories
Utilities.SetupMaterialHDCamera(hdCamera, m_DebugViewTilesMaterial);
m_DebugViewTilesMaterial.SetInt("_ViewTilesFlags", (int)m_PassSettings.tileDebugByCategory);
m_DebugViewTilesMaterial.SetVector("_MousePixelCoord", mousePixelCoord);
m_DebugViewTilesMaterial.EnableKeyword(bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.DisableKeyword(!bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.EnableKeyword("SHOW_LIGHT_CATEGORIES");
m_DebugViewTilesMaterial.DisableKeyword("SHOW_FEATURE_VARIANTS");
cmd.Blit(null, colorBuffer, m_DebugViewTilesMaterial, 0);
}
SetGlobalPropertyRedirect(null, 0, null);
renderContext.ExecuteCommandBuffer(cmd);
cmd.Dispose();
}
public override void RenderDeferredLighting(HDCamera hdCamera, ScriptableRenderContext renderContext,
DebugDisplaySettings debugDisplaySettings,
RenderTargetIdentifier[] colorBuffers, RenderTargetIdentifier depthStencilBuffer, RenderTargetIdentifier depthStencilTexture,
bool outputSplitLightingForSSS)
{
var bUseClusteredForDeferred = !usingFptl;
using (new Utilities.ProfilingSample(m_PassSettings.enableTileAndCluster ? "TilePass - Deferred Lighting Pass" : "SinglePass - Deferred Lighting Pass", renderContext))
using (new Utilities.ProfilingSample((m_PassSettings.enableTileAndCluster ? "TilePass - Deferred Lighting Pass" : "SinglePass - Deferred Lighting Pass") + (outputSplitLightingForSSS ? " MRT" : ""), renderContext))
{
var cmd = new CommandBuffer();
cmd.name = bUseClusteredForDeferred ? "Clustered pass" : "Tiled pass";

SetupDebugDisplayMode(debugDisplaySettings.IsDebugDisplayEnable());
SetupDebugDisplayMode(debugDisplaySettings.IsDebugDisplayEnabled());
if (!m_PassSettings.enableTileAndCluster)
{

if (m_PassSettings.enableComputeLightEvaluation)
{
bool enableFeatureVariants = GetFeatureVariantsEnabled() && !debugDisplaySettings.IsDebugDisplayEnable();
bool enableFeatureVariants = GetFeatureVariantsEnabled() && !debugDisplaySettings.IsDebugDisplayEnabled();
int numVariants = 1;
if (enableFeatureVariants)

}
else
{
if (debugDisplaySettings.IsDebugDisplayEnable())
if (debugDisplaySettings.IsDebugDisplayEnabled())
{
kernel = usingFptl ? s_shadeOpaqueDirectFptlDebugDisplayKernel : s_shadeOpaqueDirectClusteredDebugDisplayKernel;
}

PushGlobalParams(camera, renderContext, shadeOpaqueShader, kernel);
// TODO: Update value like in ApplyDebugDisplaySettings() call. Sadly it is high likely that this will not be keep in sync. we really need to get rid of this by making global parameters visible to compute shaders
cmd.SetComputeIntParam(shadeOpaqueShader, "_DebugDisplayMode", Shader.GetGlobalInt("_DebugDisplayMode"));
cmd.SetComputeIntParam(shadeOpaqueShader, "_DebugViewMaterial", Shader.GetGlobalInt("_DebugViewMaterial"));
cmd.SetComputeVectorParam(shadeOpaqueShader, "_DebugLightingAlbedo", Shader.GetGlobalVector("_DebugLightingAlbedo"));
cmd.SetComputeVectorParam(shadeOpaqueShader, "_DebugLightingSmoothness", Shader.GetGlobalVector("_DebugLightingSmoothness"));

Utilities.SetMatrixCS(cmd, shadeOpaqueShader, "_InvViewProjMatrix", invViewProjection);
Utilities.SetMatrixCS(cmd, shadeOpaqueShader, "_ViewProjMatrix", viewProjection);
Utilities.SetMatrixCS(cmd, shadeOpaqueShader, "g_mInvScrProjection", Shader.GetGlobalMatrix("g_mInvScrProjection"));
cmd.SetComputeVectorParam(shadeOpaqueShader, "_ScreenSize", Shader.GetGlobalVector("_ScreenSize"));
cmd.SetComputeVectorParam(shadeOpaqueShader, "_ScreenSize", hdCamera.screenSize);
cmd.SetComputeIntParam(shadeOpaqueShader, "_UseTileLightList", Shader.GetGlobalInt("_UseTileLightList"));
cmd.SetComputeVectorParam(shadeOpaqueShader, "_Time", Shader.GetGlobalVector("_Time"));

Utilities.SelectKeyword(m_DeferredAllMaterialSRT, "USE_CLUSTERED_LIGHTLIST", "USE_FPTL_LIGHTLIST", bUseClusteredForDeferred);
Utilities.DrawFullScreen(cmd, m_DeferredAllMaterialSRT, hdCamera, colorBuffers[0], depthStencilBuffer);
}
}
}
if (m_PassSettings.tileDebugByCategory != TileLightLoopProducer.TileSettings.TileDebug.None)
{
// Debug tiles
PushGlobalParams(camera, renderContext, null, 0);
if (m_PassSettings.tileDebugByCategory == TileLightLoopProducer.TileSettings.TileDebug.FeatureVariants)
{
if (GetFeatureVariantsEnabled())
{
// featureVariants
Utilities.SetupMaterialHDCamera(hdCamera, m_DebugViewTilesMaterial);
m_DebugViewTilesMaterial.SetInt("_NumTiles", numTiles);
m_DebugViewTilesMaterial.SetInt("_ViewTilesFlags", (int)m_PassSettings.tileDebugByCategory);
m_DebugViewTilesMaterial.SetVector("_MousePixelCoord", mousePixelCoord);
m_DebugViewTilesMaterial.SetBuffer("g_TileList", s_TileList);
m_DebugViewTilesMaterial.SetBuffer("g_DispatchIndirectBuffer", s_DispatchIndirectBuffer);
m_DebugViewTilesMaterial.EnableKeyword(bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.DisableKeyword(!bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.DisableKeyword("SHOW_LIGHT_CATEGORIES");
m_DebugViewTilesMaterial.EnableKeyword("SHOW_FEATURE_VARIANTS");
cmd.SetRenderTarget(colorBuffers[0]);
cmd.DrawProcedural(Matrix4x4.identity, m_DebugViewTilesMaterial, 0, MeshTopology.Triangles, numTiles * 6);
}
}
else if (m_PassSettings.tileDebugByCategory != TileLightLoopProducer.TileSettings.TileDebug.None)
{
// lightCategories
Utilities.SetupMaterialHDCamera(hdCamera, m_DebugViewTilesMaterial);
m_DebugViewTilesMaterial.SetInt("_ViewTilesFlags", (int)m_PassSettings.tileDebugByCategory);
m_DebugViewTilesMaterial.SetVector("_MousePixelCoord", mousePixelCoord);
m_DebugViewTilesMaterial.EnableKeyword(bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.DisableKeyword(!bUseClusteredForDeferred ? "USE_CLUSTERED_LIGHTLIST" : "USE_FPTL_LIGHTLIST");
m_DebugViewTilesMaterial.EnableKeyword("SHOW_LIGHT_CATEGORIES");
m_DebugViewTilesMaterial.DisableKeyword("SHOW_FEATURE_VARIANTS");
cmd.Blit(null, colorBuffers[0], m_DebugViewTilesMaterial, 0);
}
}
}

8
Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePass.hlsl


StructuredBuffer<uint> g_vLightListGlobal; // don't support Buffer yet in unity
#ifdef USE_FPTL_LIGHTLIST
#define TILE_SIZE TILE_SIZE_FPTL
#endif
// Don't do a "#else" so we can catch error if including call don't setup thing correctly
#ifdef USE_CLUSTERED_LIGHTLIST
#define TILE_SIZE TILE_SIZE_CLUSTERED
#endif
#define DWORD_PER_TILE 16 // See dwordsPerTile in TilePass.cs, we have roomm for 31 lights and a number of light value all store on 16 bit (ushort)
// these uniforms are only needed for when OPAQUES_ONLY is NOT defined

11
Assets/ScriptableRenderPipeline/HDRenderPipeline/Lighting/TilePass/TilePassLoop.hlsl


void ApplyDebug(LightLoopContext lightLoopContext, float3 positionWS, inout float3 diffuseLighting, inout float3 specularLighting)
{
#ifdef DEBUG_DISPLAY
if (_DebugDisplayMode == DEBUGDISPLAYMODE_DIFFUSE_LIGHTING)
if (_DebugLightingMode == DEBUGLIGHTINGMODE_DIFFUSE_LIGHTING)
else if (_DebugDisplayMode == DEBUGDISPLAYMODE_SPECULAR_LIGHTING)
else if (_DebugLightingMode == DEBUGLIGHTINGMODE_SPECULAR_LIGHTING)
else if (_DebugDisplayMode == DEBUGDISPLAYMODE_VISUALIZE_CASCADE)
else if (_DebugLightingMode == DEBUGLIGHTINGMODE_VISUALIZE_CASCADE)
{
specularLighting = float3(0.0, 0.0, 0.0);

uint GetTileSize()
{
return TILE_SIZE_CLUSTERED;
if (_UseTileLightList)
return TILE_SIZE_FPTL;
else
return TILE_SIZE_CLUSTERED;
}
void GetCountAndStartCluster(PositionInputs posInput, uint lightCategory, out uint start, out uint lightCount)

19
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Editor/LitUI.cs


public static GUIContent thicknessText = new GUIContent("Thickness", "If subsurface scattering is enabled, low values allow some light to be transmitted through the object.");
public static GUIContent thicknessMapText = new GUIContent("Thickness map", "If subsurface scattering is enabled, low values allow some light to be transmitted through the object.");
// Specular color
public static GUIContent specularColorText = new GUIContent("Specular Color", "Specular color (RGB)");
// Emissive
public static string lightingText = "Inputs Lighting";
public static GUIContent emissiveText = new GUIContent("Emissive Color", "Emissive");

{
Standard = 0,
SubsurfaceScattering = 1,
ClearCoat = 2,
SpecularColor = 3
SpecularColor = 2
}
protected MaterialProperty UVBase = null;

protected const string kAnisotropy = "_Anisotropy";
protected MaterialProperty anisotropyMap = null;
protected const string kAnisotropyMap = "_AnisotropyMap";
protected MaterialProperty specularColor = null;
protected const string kSpecularColor = "_SpecularColor";
protected MaterialProperty specularColorMap = null;
protected const string kSpecularColorMap = "_SpecularColorMap";
protected MaterialProperty UVDetail = null;
protected const string kUVDetail = "_UVDetail";

tangentMap = FindProperty(kTangentMap, props);
anisotropy = FindProperty(kAnisotropy, props);
anisotropyMap = FindProperty(kAnisotropyMap, props);
specularColor = FindProperty(kSpecularColor, props);
specularColorMap = FindProperty(kSpecularColorMap, props);
// Details
UVDetail = FindProperty(kUVDetail, props);

{
ShaderSSSInputGUI(material);
}
else if ((MaterialIDType)materialID.floatValue == MaterialIDType.SpecularColor)
{
m_MaterialEditor.TexturePropertySingleLine(Styles.specularColorText, specularColorMap, specularColor);
}
EditorGUILayout.Space();
GUILayout.Label(" " + Styles.textureControlText, EditorStyles.label);

SetKeyword(material, "_ANISOTROPYMAP", material.GetTexture(kAnisotropyMap));
SetKeyword(material, "_DETAIL_MAP", material.GetTexture(kDetailMap));
SetKeyword(material, "_SUBSURFACE_RADIUS_MAP", material.GetTexture(kSubsurfaceRadiusMap));
SetKeyword(material, "_THICKNESS_MAP", material.GetTexture(kThicknessMap));
SetKeyword(material, "_THICKNESSMAP", material.GetTexture(kThicknessMap));
SetKeyword(material, "_SPECULARCOLORMAP", material.GetTexture(kSpecularColorMap));
bool needUV2 = (UVDetailMapping)material.GetFloat(kUVDetail) == UVDetailMapping.UV2 && (UVBaseMapping)material.GetFloat(kUVBase) == UVBaseMapping.UV0;
bool needUV3 = (UVDetailMapping)material.GetFloat(kUVDetail) == UVDetailMapping.UV3 && (UVBaseMapping)material.GetFloat(kUVBase) == UVBaseMapping.UV0;

20
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.cs


{
LitStandard = 0,
LitSSS = 1,
LitClearCoat = 2,
LitSpecular = 3,
LitSpecular = 2,
LitUnused = 3,
LitAniso = 4 // Should be the last as it is not setup by the users but generated based on anisotropy property
};

public static uint FEATURE_FLAG_MATERIAL_LIT_STANDARD = 1 << 12;
public static uint FEATURE_FLAG_MATERIAL_LIT_SSS = 1 << 13;
public static uint FEATURE_FLAG_MATERIAL_LIT_CLEAR_COAT = 1 << 14;
public static uint FEATURE_FLAG_MATERIAL_LIT_SPECULAR = 1 << 15;
public static uint FEATURE_FLAG_MATERIAL_LIT_ANISO = 1 << 16;
public static uint FEATURE_FLAG_MATERIAL_LIT_SPECULAR = 1 << 14;
public static uint FEATURE_FLAG_MATERIAL_LIT_ANISO = 1 << 15;
}
//-----------------------------------------------------------------------------

[SurfaceDataAttributes("Subsurface Profile")]
public int subsurfaceProfile;
// Clearcoat
[SurfaceDataAttributes("Coat Normal", true)]
public Vector3 coatNormalWS;
[SurfaceDataAttributes("Coat Smoothness")]
public float coatPerceptualSmoothness;
// SpecColor
[SurfaceDataAttributes("Specular Color", false, true)]
public Vector3 specularColor;

public int subsurfaceProfile;
public bool enableTransmission; // Read from the SSS profile
public Vector3 transmittance;
// Clearcoat
[SurfaceDataAttributes("", true)]
public Vector3 coatNormalWS;
public float coatRoughness;
// SpecColor
// fold into fresnel0

31
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.cs.hlsl


//
#define MATERIALID_LIT_STANDARD (0)
#define MATERIALID_LIT_SSS (1)
#define MATERIALID_LIT_CLEAR_COAT (2)
#define MATERIALID_LIT_SPECULAR (3)
#define MATERIALID_LIT_SPECULAR (2)
#define MATERIALID_LIT_UNUSED (3)
#define MATERIALID_LIT_ANISO (4)
//

#define FEATURE_FLAG_MATERIAL_LIT_SSS (8192)
#define FEATURE_FLAG_MATERIAL_LIT_CLEAR_COAT (16384)
#define FEATURE_FLAG_MATERIAL_LIT_SPECULAR (32768)
#define FEATURE_FLAG_MATERIAL_LIT_ANISO (65536)
#define FEATURE_FLAG_MATERIAL_LIT_SPECULAR (16384)
#define FEATURE_FLAG_MATERIAL_LIT_ANISO (32768)
//
// UnityEngine.Experimental.Rendering.HDPipeline.Lit.SurfaceData: static fields

#define DEBUGVIEW_LIT_SURFACEDATA_SUBSURFACE_RADIUS (1010)
#define DEBUGVIEW_LIT_SURFACEDATA_THICKNESS (1011)
#define DEBUGVIEW_LIT_SURFACEDATA_SUBSURFACE_PROFILE (1012)
#define DEBUGVIEW_LIT_SURFACEDATA_COAT_NORMAL_WS (1013)
#define DEBUGVIEW_LIT_SURFACEDATA_COAT_PERCEPTUAL_SMOOTHNESS (1014)
#define DEBUGVIEW_LIT_SURFACEDATA_SPECULAR_COLOR (1015)
#define DEBUGVIEW_LIT_SURFACEDATA_SPECULAR_COLOR (1013)
//
// UnityEngine.Experimental.Rendering.HDPipeline.Lit.BSDFData: static fields

#define DEBUGVIEW_LIT_BSDFDATA_SUBSURFACE_PROFILE (1044)
#define DEBUGVIEW_LIT_BSDFDATA_ENABLE_TRANSMISSION (1045)
#define DEBUGVIEW_LIT_BSDFDATA_TRANSMITTANCE (1046)
#define DEBUGVIEW_LIT_BSDFDATA_COAT_NORMAL_WS (1047)
#define DEBUGVIEW_LIT_BSDFDATA_COAT_ROUGHNESS (1048)
//
// UnityEngine.Experimental.Rendering.HDPipeline.Lit.GBufferMaterial: static fields

float subsurfaceRadius;
float thickness;
int subsurfaceProfile;
float3 coatNormalWS;
float coatPerceptualSmoothness;
float3 specularColor;
};

int subsurfaceProfile;
bool enableTransmission;
float3 transmittance;
float3 coatNormalWS;
float coatRoughness;
};
//

case DEBUGVIEW_LIT_SURFACEDATA_SUBSURFACE_PROFILE:
result = GetIndexColor(surfacedata.subsurfaceProfile);
break;
case DEBUGVIEW_LIT_SURFACEDATA_COAT_NORMAL_WS:
result = surfacedata.coatNormalWS * 0.5 + 0.5;
break;
case DEBUGVIEW_LIT_SURFACEDATA_COAT_PERCEPTUAL_SMOOTHNESS:
result = surfacedata.coatPerceptualSmoothness.xxx;
break;
case DEBUGVIEW_LIT_SURFACEDATA_SPECULAR_COLOR:
result = surfacedata.specularColor;
needLinearToSRGB = true;

break;
case DEBUGVIEW_LIT_BSDFDATA_TRANSMITTANCE:
result = bsdfdata.transmittance;
break;
case DEBUGVIEW_LIT_BSDFDATA_COAT_NORMAL_WS:
result = bsdfdata.coatNormalWS * 0.5 + 0.5;
break;
case DEBUGVIEW_LIT_BSDFDATA_COAT_ROUGHNESS:
result = bsdfdata.coatRoughness.xxx;
break;
}
}

316
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.hlsl


#define LTC_LUT_OFFSET (0.5 * rcp(LTC_LUT_SIZE))
// SSS parameters
#define SSS_N_PROFILES 8
#define SSS_UNIT_CONVERSION (1.0 / 300.0) // From 1/3 centimeters to meters
#define SSS_LOW_THICKNESS 0.005 // 5 mm
#define SSS_N_PROFILES 8
#define SSS_UNIT_CONVERSION (1.0 / 300.0) // From 1/3 centimeters to meters
#define SSS_LOW_THICKNESS 0.005 // 0.5 cm
#define CENTIMETERS_TO_METERS (1.0 / 100.0)
uint _EnableSSS; // Globally toggles subsurface scattering on/off
uint _TransmissionFlags; // 1 bit/profile; 0 = inf. thick, 1 = supports transmission

void ApplyDebugToBSDFData(inout BSDFData bsdfData)
{
#ifdef DEBUG_DISPLAY
if (_DebugDisplayMode == DEBUGDISPLAYMODE_SPECULAR_LIGHTING)
if (_DebugLightingMode == DEBUGLIGHTINGMODE_SPECULAR_LIGHTING)
{
bool overrideSmoothness = _DebugLightingSmoothness.x != 0.0;
float overrideSmoothnessValue = _DebugLightingSmoothness.y;

}
}
if (_DebugDisplayMode == DEBUGDISPLAYMODE_DIFFUSE_LIGHTING)
if (_DebugLightingMode == DEBUGLIGHTINGMODE_DIFFUSE_LIGHTING)
}
void ConfigureTexturingForSSS(inout BSDFData bsdfData)
{
bool performPostScatterTexturing = IsBitSet(_TexturingModeFlags, bsdfData.subsurfaceProfile);
// It's either post-scatter, or pre- and post-scatter texturing.
bsdfData.diffuseColor = performPostScatterTexturing ? float3(1, 1, 1)
: sqrt(bsdfData.diffuseColor);
}
// Evaluates transmittance for a linear combination of two normalized 2D Gaussians.

// Thickness and SSS radius are decoupled for artists.
// In theory, we should modify the thickness by the inverse of the radius scale of the profile.
// thickness /= radiusScale;
thickness /= SSS_UNIT_CONVERSION;
thickness /= CENTIMETERS_TO_METERS;
float t2 = thickness * thickness;

return transmittance * tintColor;
}
void FillMaterialIdStandardData(float3 baseColor, float specular, float metallic, float roughness, float3 normalWS, float3 tangentWS, float anisotropy, inout BSDFData bsdfData)
{
bsdfData.diffuseColor = baseColor * (1.0 - metallic);
bsdfData.fresnel0 = lerp(float3(specular.xxx), baseColor, metallic);
// TODO: encode specular
bsdfData.tangentWS = tangentWS;
bsdfData.bitangentWS = cross(normalWS, tangentWS);
ConvertAnisotropyToRoughness(roughness, anisotropy, bsdfData.roughnessT, bsdfData.roughnessB);
bsdfData.anisotropy = anisotropy;
}
void FillMaterialIdSSSData(float3 baseColor, int subsurfaceProfile, float subsurfaceRadius, float thickness, inout BSDFData bsdfData)
{
bsdfData.diffuseColor = baseColor;
// TODO take from subsurfaceProfile
bsdfData.fresnel0 = 0.04; // Should be 0.028 for the skin
bsdfData.subsurfaceProfile = subsurfaceProfile;
// Make the Std. Dev. of 1 correspond to the effective radius of 1 cm (three-sigma rule).
bsdfData.subsurfaceRadius = SSS_UNIT_CONVERSION * subsurfaceRadius + 0.0001;
bsdfData.thickness = CENTIMETERS_TO_METERS * (_ThicknessRemaps[subsurfaceProfile][0] +
_ThicknessRemaps[subsurfaceProfile][1] * thickness);
bsdfData.enableTransmission = IsBitSet(_TransmissionFlags, subsurfaceProfile);
if (bsdfData.enableTransmission)
{
bsdfData.transmittance = ComputeTransmittance( _HalfRcpVariancesAndLerpWeights[subsurfaceProfile][0].xyz,
_HalfRcpVariancesAndLerpWeights[subsurfaceProfile][0].w,
_HalfRcpVariancesAndLerpWeights[subsurfaceProfile][1].xyz,
_HalfRcpVariancesAndLerpWeights[subsurfaceProfile][1].w,
_TintColors[subsurfaceProfile].rgb, bsdfData.thickness, bsdfData.subsurfaceRadius);
}
#ifndef SSS_FILTER_HORIZONTAL_AND_COMBINE // When doing the SSS comine pass, we must not apply the modification of diffuse color
// Handle post-scatter, or pre- and post-scatter texturing.
// We modify diffuseColor here so it affect all the lighting + GI (lightprobe / lightmap) (Need to be done also in GBuffer pass) + transmittance
// diffuseColor will be solely use during lighting pass. The other contribution will be apply in subsurfacescattering convolution.
bool performPostScatterTexturing = IsBitSet(_TexturingModeFlags, subsurfaceProfile);
bsdfData.diffuseColor = performPostScatterTexturing ? float3(1.0, 1.0, 1.0) : sqrt(bsdfData.diffuseColor);
#endif
}
//-----------------------------------------------------------------------------
// conversion function for forward
//-----------------------------------------------------------------------------

if (bsdfData.materialId == MATERIALID_LIT_STANDARD)
{
bsdfData.diffuseColor = surfaceData.baseColor * (1.0 - surfaceData.metallic);
bsdfData.fresnel0 = lerp(float3(surfaceData.specular, surfaceData.specular, surfaceData.specular), surfaceData.baseColor, surfaceData.metallic);
bsdfData.tangentWS = surfaceData.tangentWS;
bsdfData.bitangentWS = cross(surfaceData.normalWS, surfaceData.tangentWS);
ConvertAnisotropyToRoughness(bsdfData.roughness, surfaceData.anisotropy, bsdfData.roughnessT, bsdfData.roughnessB);
bsdfData.anisotropy = surfaceData.anisotropy;
bsdfData.materialId = surfaceData.anisotropy > 0 ? MATERIALID_LIT_ANISO : bsdfData.materialId;
FillMaterialIdStandardData(surfaceData.baseColor, surfaceData.specular, surfaceData.metallic, bsdfData.roughness, surfaceData.normalWS, surfaceData.tangentWS, surfaceData.anisotropy, bsdfData);
bsdfData.materialId = surfaceData.anisotropy > 0.0 ? MATERIALID_LIT_ANISO : bsdfData.materialId;
bsdfData.diffuseColor = surfaceData.baseColor;
// TODO take from subsurfaceProfile
bsdfData.fresnel0 = 0.04; /* 0.028 ? */
bsdfData.subsurfaceProfile = surfaceData.subsurfaceProfile;
// Make the Std. Dev. of 1 correspond to the effective radius of 1 cm (three-sigma rule).
bsdfData.subsurfaceRadius = SSS_UNIT_CONVERSION * surfaceData.subsurfaceRadius + 0.0001;
bsdfData.thickness = SSS_UNIT_CONVERSION * (_ThicknessRemaps[bsdfData.subsurfaceProfile][0] +
_ThicknessRemaps[bsdfData.subsurfaceProfile][1] * surfaceData.thickness);
bsdfData.enableTransmission = IsBitSet(_TransmissionFlags, bsdfData.subsurfaceProfile);
if (bsdfData.enableTransmission)
{
bsdfData.transmittance = ComputeTransmittance(_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][0].xyz,
_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][0].w,
_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][1].xyz,
_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][1].w,
_TintColors[bsdfData.subsurfaceProfile].rgb, bsdfData.thickness, bsdfData.subsurfaceRadius);
}
}
else if (bsdfData.materialId == MATERIALID_LIT_CLEAR_COAT)
{
bsdfData.diffuseColor = surfaceData.baseColor * (1.0 - surfaceData.metallic);
bsdfData.fresnel0 = lerp(float3(surfaceData.specular, surfaceData.specular, surfaceData.specular), surfaceData.baseColor, surfaceData.metallic);
bsdfData.coatNormalWS = surfaceData.coatNormalWS;
bsdfData.coatRoughness = PerceptualSmoothnessToRoughness(surfaceData.coatPerceptualSmoothness);
FillMaterialIdSSSData(surfaceData.baseColor, surfaceData.subsurfaceProfile, surfaceData.subsurfaceRadius, surfaceData.thickness, bsdfData);
}
else if (bsdfData.materialId == MATERIALID_LIT_SPECULAR)
{

#ifdef OUTPUT_SPLIT_LIGHTING
ConfigureTexturingForSSS(bsdfData);
#endif
ApplyDebugToBSDFData(bsdfData);
return bsdfData;

// conversion function for deferred
//-----------------------------------------------------------------------------
// Tetra encoding 10:10 + 2 seems equivalent to oct 11:11, as oct is cheaper use that. Let here for future testing in reflective scene for comparison
//#define USE_NORMAL_TETRAHEDRON_ENCODING
// Encode SurfaceData (BSDF parameters) into GBuffer
// Must be in sync with RT declared in HDRenderPipeline.cs ::Rebuild

outGBuffer0 = float4(surfaceData.baseColor, surfaceData.specularOcclusion);
// RT1 - 10:10:10:2
// Encode normal on 20bit with oct compression
float2 octNormalWS = PackNormalOctEncode(surfaceData.normalWS);
// TODO: Store 2 bit of flag into perceptualSmoothness (one for SSR, other is free (deferred planar reflection ID ? / MatID extension ?)
outGBuffer1 = float4(octNormalWS * 0.5 + 0.5, PerceptualSmoothnessToPerceptualRoughness(surfaceData.perceptualSmoothness), PackMaterialId(surfaceData.materialId));
#ifdef USE_NORMAL_TETRAHEDRON_ENCODING
// Encode normal on 20bit + 2bit (faceIndex) with tetrahedal compression
uint faceIndex;
float2 tetraNormalWS = PackNormalTetraEncode(surfaceData.normalWS, faceIndex);
// Store faceIndex on two bits with perceptualRoughness
outGBuffer1 = float4(tetraNormalWS * 0.5 + 0.5, PackFloatInt10bit(PerceptualSmoothnessToPerceptualRoughness(surfaceData.perceptualSmoothness), faceIndex, 4.0), PackMaterialId(surfaceData.materialId));
#else
// Encode normal on 20bit with oct compression + 2bit of sign
float2 octNormalWS = PackNormalOctEncode(surfaceData.normalWS);
// To have more precision encode the sign of xy in a separate uint
uint octNormalSign = (octNormalWS.x > 0.0 ? 1 : 0) + (octNormalWS.y > 0.0 ? 2 : 0);
// Store octNormalSign on two bits with perceptualRoughness
outGBuffer1 = float4(abs(octNormalWS), PackFloatInt10bit(PerceptualSmoothnessToPerceptualRoughness(surfaceData.perceptualSmoothness), octNormalSign, 4.0), PackMaterialId(surfaceData.materialId));
#endif
// RT2 - 8:8:8:8
if (surfaceData.materialId == MATERIALID_LIT_STANDARD)

else if (surfaceData.materialId == MATERIALID_LIT_SSS)
{
outGBuffer2 = float4(surfaceData.subsurfaceRadius, surfaceData.thickness, 0.0, surfaceData.subsurfaceProfile * rcp(SSS_N_PROFILES - 1));
}
else if (surfaceData.materialId == MATERIALID_LIT_CLEAR_COAT)
{
// Encode coat normal on 16bit with oct compression
float2 octCoatNormalWS = PackNormalOctEncode(surfaceData.coatNormalWS);
// TODO: store metal and specular together, specular should be an enum (fixed value)
outGBuffer2 = float4(octCoatNormalWS * 0.5 + 0.5, PerceptualSmoothnessToRoughness(surfaceData.coatPerceptualSmoothness), surfaceData.metallic);
}
else if (surfaceData.materialId == MATERIALID_LIT_SPECULAR)
{

float3 baseColor = inGBuffer0.rgb;
bsdfData.specularOcclusion = inGBuffer0.a;
bsdfData.normalWS = UnpackNormalOctEncode(float2(inGBuffer1.r * 2.0 - 1.0, inGBuffer1.g * 2.0 - 1.0));
bsdfData.perceptualRoughness = inGBuffer1.b;
#ifdef USE_NORMAL_TETRAHEDRON_ENCODING
uint faceIndex;
UnpackFloatInt10bit(inGBuffer1.b, 4.0, bsdfData.perceptualRoughness, faceIndex);
bsdfData.normalWS = UnpackNormalTetraEncode(inGBuffer1.xy * 2.0 - 1.0, faceIndex);
#else
uint octNormalSign;
UnpackFloatInt10bit(inGBuffer1.b, 4.0, bsdfData.perceptualRoughness, octNormalSign);
inGBuffer1.r *= (octNormalSign & 1) ? 1.0 : -1.0;
inGBuffer1.g *= (octNormalSign & 2) ? 1.0 : -1.0;
bsdfData.normalWS = UnpackNormalOctEncode(float2(inGBuffer1.r, inGBuffer1.g));
#endif
int supportsClearCoat = (featureFlags & (MATERIALID_LIT_CLEAR_COAT)) != 0;
if(supportsStandard + supportsSSS + supportsClearCoat + supportsSpecular > 1)
if(supportsStandard + supportsSSS + supportsSpecular > 1)
{
bsdfData.materialId = UnpackMaterialId(inGBuffer1.a); // only fetch materialid if it is not statically known from feature flags
}

if(supportsStandard) bsdfData.materialId = MATERIALID_LIT_STANDARD;
else if(supportsSSS) bsdfData.materialId = MATERIALID_LIT_SSS;
else if(supportsClearCoat) bsdfData.materialId = MATERIALID_LIT_CLEAR_COAT;
else bsdfData.materialId = MATERIALID_LIT_SPECULAR;
}

// TODO extract spec
float specular = 0.04;
float specular = 0.04; // TODO extract spec
bsdfData.diffuseColor = baseColor * (1.0 - metallic);
bsdfData.fresnel0 = lerp(float3(specular, specular, specular), baseColor, metallic);
bsdfData.tangentWS = UnpackNormalOctEncode(float2(inGBuffer2.rg * 2.0 - 1.0));
bsdfData.bitangentWS = cross(bsdfData.normalWS, bsdfData.tangentWS);
ConvertAnisotropyToRoughness(bsdfData.roughness, anisotropy, bsdfData.roughnessT, bsdfData.roughnessB);
bsdfData.anisotropy = anisotropy;
float3 tangentWS = UnpackNormalOctEncode(float2(inGBuffer2.rg * 2.0 - 1.0));
FillMaterialIdStandardData(baseColor, specular, metallic, bsdfData.roughness, bsdfData.normalWS, tangentWS, anisotropy, bsdfData);
if ((featureFlags & FEATURE_FLAG_MATERIAL_LIT_ANISO) && (featureFlags & FEATURE_FLAG_MATERIAL_LIT_STANDARD) == 0 || anisotropy > 0)
{

else if (supportsSSS && bsdfData.materialId == MATERIALID_LIT_SSS)
{
bsdfData.diffuseColor = baseColor;
// TODO take from subsurfaceProfile
bsdfData.fresnel0 = 0.04; /* 0.028 ? */
bsdfData.subsurfaceProfile = (SSS_N_PROFILES - 1) * inGBuffer2.a + 0.1; // Need to bias for integers to round trip through the G-buffer
// Make the Std. Dev. of 1 correspond to the effective radius of 1 cm (three-sigma rule).
bsdfData.subsurfaceRadius = SSS_UNIT_CONVERSION * inGBuffer2.r + 0.0001;
bsdfData.thickness = SSS_UNIT_CONVERSION * (_ThicknessRemaps[bsdfData.subsurfaceProfile][0] +
_ThicknessRemaps[bsdfData.subsurfaceProfile][1] * inGBuffer2.g);
bsdfData.enableTransmission = IsBitSet(_TransmissionFlags, bsdfData.subsurfaceProfile);
if (bsdfData.enableTransmission)
{
bsdfData.transmittance = ComputeTransmittance(_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][0].xyz,
_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][0].w,
_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][1].xyz,
_HalfRcpVariancesAndLerpWeights[bsdfData.subsurfaceProfile][1].w,
_TintColors[bsdfData.subsurfaceProfile].rgb, bsdfData.thickness, bsdfData.subsurfaceRadius);
}
}
else if (supportsClearCoat && bsdfData.materialId == MATERIALID_LIT_CLEAR_COAT)
{
float metallic = inGBuffer2.a;
// TODO extract spec
float specular = 0.04;
bsdfData.diffuseColor = baseColor * (1.0 - metallic);
bsdfData.fresnel0 = lerp(float3(specular, specular, specular), baseColor, metallic);
bsdfData.coatNormalWS = UnpackNormalOctEncode(float2(inGBuffer2.rg * 2.0 - 1.0));
bsdfData.coatRoughness = inGBuffer2.b;
int subsurfaceProfile = (SSS_N_PROFILES - 0.9) * inGBuffer2.a;
float subsurfaceRadius = inGBuffer2.r;
float thickness = inGBuffer2.g;
FillMaterialIdSSSData(baseColor, subsurfaceProfile, subsurfaceRadius, thickness, bsdfData);
}
else if (supportsSpecular && bsdfData.materialId == MATERIALID_LIT_SPECULAR)
{

bakeDiffuseLighting = inGBuffer3.rgb;
#ifdef OUTPUT_SPLIT_LIGHTING
ConfigureTexturingForSSS(bsdfData);
#endif
ApplyDebugToBSDFData(bsdfData);
}

{
featureFlags |= FEATURE_FLAG_MATERIAL_LIT_SSS;
}
else if (materialId == MATERIALID_LIT_CLEAR_COAT)
{
featureFlags |= FEATURE_FLAG_MATERIAL_LIT_CLEAR_COAT;
}
else if (materialId == MATERIALID_LIT_SPECULAR)
{
featureFlags |= FEATURE_FLAG_MATERIAL_LIT_SPECULAR;

// Precomputed lighting data to send to the various lighting functions
struct PreLightData
{
float NdotV;
// General
float NdotV; // Between 0.0001 and 1
float unNdotV; // Between -1 and 1
// GGX iso
// Aniso
// GGX Aniso
// IBL
float3 iblDirWS; // Dominant specular direction, used for IBL in EvaluateBSDF_Env()
float iblMipLevel;

{
PreLightData preLightData;
// We have handle the case of NdotV being negative in GetData() function with GetShiftedNdotV.
// So we don't need to saturate or take the abs here.
// In case a material use negative normal for double sided lighting like speedtree this will be handle in the GetData() code too.
preLightData.NdotV = dot(bsdfData.normalWS, V);
// General
float3 iblNormalWS = bsdfData.normalWS;
preLightData.unNdotV = dot(bsdfData.normalWS, V);
// GetShiftedNdotV return a positive NdotV
// In case a material use negative normal for double sided lighting like Speedtree they need to do a new calculation
preLightData.NdotV = GetShiftedNdotV(iblNormalWS, V, preLightData.unNdotV);
// GGX iso
float iblNdotV = preLightData.NdotV;
float3 iblNormalWS = bsdfData.normalWS;
// Check if we precompute anisotropy too
// GGX aniso
if (bsdfData.materialId == MATERIALID_LIT_ANISO)
{
preLightData.TdotV = dot(bsdfData.tangentWS, V);

iblNormalWS = GetAnisotropicModifiedNormal(bsdfData.bitangentWS, bsdfData.normalWS, V, bsdfData.anisotropy);
iblNormalWS = GetAnisotropicModifiedNormal(bsdfData.bitangentWS, iblNormalWS, V, bsdfData.anisotropy);
// NOTE: If we follow the theory we should use the modified normal for the different calculation implying a normal (like NDotV) and use iblNormalWS
// NOTE: If we follow the theory we should use the modified normal for the different calculation implying a normal (like NdotV) and use iblNormalWS
GetPreIntegratedFGD(iblNdotV, bsdfData.perceptualRoughness, bsdfData.fresnel0, preLightData.specularFGD, preLightData.diffuseFGD);
// IBL
GetPreIntegratedFGD(preLightData.NdotV, bsdfData.perceptualRoughness, bsdfData.fresnel0, preLightData.specularFGD, preLightData.diffuseFGD);
// Area light specific
// Area light
// UVs for sampling the LUTs
float theta = FastACos(preLightData.NdotV);
float2 uv = LTC_LUT_OFFSET + LTC_LUT_SCALE * float2(bsdfData.perceptualRoughness, theta * INV_HALF_PI);

out float3 specularLighting)
{
float NdotL = saturate(dot(bsdfData.normalWS, L));
float NdotV = preLightData.NdotV;
float NdotV = preLightData.unNdotV; // This value must not be clamped
float invLenLV = rsqrt(abs(2 + 2 * LdotV)); // invLenLV = rcp(length(L + V))
// GCN Optimization: reference PBR Diffuse Lighting for GGX + Smith Microsurfaces
float invLenLV = rsqrt(abs(2.0 * LdotV + 2.0)); // invLenLV = rcp(length(L + V))
float LdotH = saturate(invLenLV + invLenLV * LdotV);
float LdotH = saturate(invLenLV * LdotV + invLenLV);
float3 F = F_Schlick(bsdfData.fresnel0, LdotH);

bsdfData.roughnessB = ClampRoughnessForAnalyticalLights(bsdfData.roughnessB);
#ifdef LIT_USE_BSDF_PRE_LAMBDAV
Vis = V_SmithJointGGXAnisoLambdaV( preLightData.TdotV, preLightData.BdotV, NdotV, TdotL, BdotL, NdotL,
bsdfData.roughnessT, bsdfData.roughnessB, preLightData.anisoGGXLambdaV);
Vis = V_SmithJointGGXAnisoLambdaV(preLightData.TdotV, preLightData.BdotV, preLightData.NdotV, TdotL, BdotL, NdotL,
bsdfData.roughnessT, bsdfData.roughnessB, preLightData.anisoGGXLambdaV);
Vis = V_SmithJointGGXAniso( preLightData.TdotV, preLightData.BdotV, NdotV, TdotL, BdotL, NdotL,
bsdfData.roughnessT, bsdfData.roughnessB);
Vis = V_SmithJointGGXAniso(preLightData.TdotV, preLightData.BdotV, preLightData.NdotV, TdotL, BdotL, NdotL,
bsdfData.roughnessT, bsdfData.roughnessB);
#endif
D = D_GGXAniso(TdotH, BdotH, NdotH, bsdfData.roughnessT, bsdfData.roughnessB);

bsdfData.roughness = ClampRoughnessForAnalyticalLights(bsdfData.roughness);
#ifdef LIT_USE_BSDF_PRE_LAMBDAV
Vis = V_SmithJointGGX(NdotL, NdotV, bsdfData.roughness, preLightData.ggxLambdaV);
Vis = V_SmithJointGGX(NdotL, preLightData.NdotV, bsdfData.roughness, preLightData.ggxLambdaV);
Vis = V_SmithJointGGX(NdotL, NdotV, bsdfData.roughness);
Vis = V_SmithJointGGX(NdotL, preLightData.NdotV, bsdfData.roughness);
#endif
D = D_GGX(NdotH, bsdfData.roughness);
}

float diffuseTerm = Lambert();
#elif LIT_DIFFUSE_GGX_BRDF
float3 diffuseTerm = DiffuseGGX(bsdfData.diffuseColor, NdotV, NdotL, NdotH, LdotV, bsdfData.perceptualRoughness);
float3 diffuseTerm = DiffuseGGX(bsdfData.diffuseColor, preLightData.NdotV, NdotL, NdotH, LdotV, bsdfData.perceptualRoughness);
float diffuseTerm = DisneyDiffuse(NdotV, NdotL, LdotH, bsdfData.perceptualRoughness);
float diffuseTerm = DisneyDiffuse(preLightData.NdotV, NdotL, LdotH, bsdfData.perceptualRoughness);
#endif
diffuseLighting = bsdfData.diffuseColor * diffuseTerm;

float4 cookie = float4(1.0, 1.0, 1.0, 1.0);
float shadow = 1;
[branch] if (lightData.shadowIndex >= 0 && illuminance > 0.0)
[branch] if (lightData.shadowIndex >= 0)
{
#ifdef SHADOWS_USE_SHADOWCTXT
shadow = GetDirectionalShadowAttenuation(lightLoopContext.shadowContext, positionWS, lightData.shadowIndex, L, posInput.unPositionSS);

illuminance *= shadow;
}
[branch] if (lightData.cookieIndex >= 0 && illuminance > 0.0)
[branch] if (lightData.cookieIndex >= 0)
{
float3 lightToSurface = positionWS - lightData.positionWS;

[branch] if (bsdfData.enableTransmission)
{
// Reverse the normal.
illuminance = saturate(dot(-bsdfData.normalWS, L));
// Reverse the normal + do some wrap lighting to have a nicer transition between regular lighting and transmittance
// Ref: Steve McAuley - Energy-Conserving Wrapped Diffuse
const float w = 0.15;
float illuminance = saturate((dot(-bsdfData.normalWS, L) + w) / ((1.0 + w) * (1.0 + w)));
// For low thickness, we can reuse the shadowing status for the back of the object.
shadow = (bsdfData.thickness <= SSS_LOW_THICKNESS) ? shadow : 1;
illuminance *= shadow * cookie.a;

// illuminance *= SampleIES(lightLoopContext, lightData.IESIndex, sphericalCoord, 0).r;
//}
[branch] if (lightData.shadowIndex >= 0 && illuminance > 0.0)
[branch] if (lightData.shadowIndex >= 0)
{
float3 offset = float3(0.0, 0.0, 0.0); // GetShadowPosOffset(nDotL, normal);
#ifdef SHADOWS_USE_SHADOWCTXT

illuminance *= shadow;
}
[branch] if (lightData.cookieIndex >= 0 && illuminance > 0.0)
[branch] if (lightData.cookieIndex >= 0)
{
float3x3 lightToWorld = float3x3(lightData.right, lightData.up, lightData.forward);

[branch] if (bsdfData.enableTransmission)
{
// Reverse the normal.
illuminance = saturate(dot(-bsdfData.normalWS, L)) * attenuation;
// Reverse the normal + do some wrap lighting to have a nicer transition between regular lighting and transmittance
// Ref: Steve McAuley - Energy-Conserving Wrapped Diffuse
const float w = 0.15;
float illuminance = saturate((dot(-bsdfData.normalWS, L) + w) / ((1.0 + w) * (1.0 + w)));
illuminance *= attenuation;
// For low thickness, we can reuse the shadowing status for the back of the object.
shadow = (bsdfData.thickness <= SSS_LOW_THICKNESS) ? shadow : 1;
illuminance *= shadow * cookie.a;

float4 cookie = float4(1.0, 1.0, 1.0, 1.0);
float shadow = 1;
[branch] if (lightData.shadowIndex >= 0 && illuminance > 0.0)
[branch] if (lightData.shadowIndex >= 0)
{
#ifdef SHADOWS_USE_SHADOWCTXT
shadow = GetDirectionalShadowAttenuation(lightLoopContext.shadowContext, positionWS, lightData.shadowIndex, L, posInput.unPositionSS);

illuminance *= shadow;
}
[branch] if (lightData.cookieIndex >= 0 && illuminance > 0.0)
[branch] if (lightData.cookieIndex >= 0)
{
// Compute the texture coordinates in [0, 1]^2.
float2 coord = positionNDC * 0.5 + 0.5;

[branch] if (bsdfData.enableTransmission)
{
// Reverse the normal.
illuminance = saturate(dot(-bsdfData.normalWS, L) * clipFactor);
// Reverse the normal + do some wrap lighting to have a nicer transition between regular lighting and transmittance
// Ref: Steve McAuley - Energy-Conserving Wrapped Diffuse
const float w = 0.15;
float illuminance = saturate((dot(-bsdfData.normalWS, L) + w) / ((1.0 + w) * (1.0 + w)));
illuminance *= clipFactor;
// For low thickness, we can reuse the shadowing status for the back of the object.
shadow = (bsdfData.thickness <= SSS_LOW_THICKNESS) ? shadow : 1;
illuminance *= shadow * cookie.a;

ltcValue = LTCEvaluate(P1, P2, B, preLightData.ltcXformDisneyDiffuse);
#endif
if (ltcValue == 0.0)
{
// The light is below the horizon.
return;
}
#ifndef LIT_DIFFUSE_LAMBERT_BRDF
ltcValue *= preLightData.ltcDisneyDiffuseMagnitude;
#endif

float3 unL = lightData.positionWS - positionWS;
[branch]
if (dot(lightData.forward, unL) >= 0)
if (dot(lightData.forward, unL) >= 0.0001)
{
// The light is back-facing.
return;

#else
ltcValue = LTCEvaluate(matL, V, bsdfData.normalWS, preLightData.NdotV, preLightData.ltcXformDisneyDiffuse);
#endif
if (ltcValue == 0.0)
{
// The polygon is either back-facing, or has been completely clipped.
return;
}
#ifndef LIT_DIFFUSE_LAMBERT_BRDF
ltcValue *= preLightData.ltcDisneyDiffuseMagnitude;

14
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Lit.shader


_Thickness("Thickness", Range(0.0, 1.0)) = 1.0
_ThicknessMap("Thickness Map", 2D) = "white" {}
_SpecularColor("SpecularColor", Color) = (1, 1, 1, 1)
_SpecularColorMap("SpecularColorMap", 2D) = "white" {}
// Wind
[ToggleOff] _EnableWind("Enable Wind", Float) = 0.0
_InitialBend("Initial Bend", float) = 1.0

_ShiverDirectionality("Shiver Directionality", Range(0.0, 1.0)) = 0.5
//_CoatCoverage("CoatCoverage", Range(0.0, 1.0)) = 0
//_CoatCoverageMap("CoatCoverageMapMap", 2D) = "white" {}
//_CoatRoughness("CoatRoughness", Range(0.0, 1.0)) = 0
//_CoatRoughnessMap("CoatRoughnessMap", 2D) = "white" {}
_DistortionVectorMap("DistortionVectorMap", 2D) = "black" {}
// Following options are for the GUI inspector and different from the input parameters above

[HideInInspector] _UVMappingMask("_UVMappingMask", Color) = (1, 0, 0, 0)
[Enum(TangentSpace, 0, ObjectSpace, 1)] _NormalMapSpace("NormalMap space", Float) = 0
[Enum(Standard, 0, Subsurface Scattering, 1, Clear Coat, 2, Specular Color, 3)] _MaterialID("MaterialId", Int) = 0
[Enum(Standard, 0, Subsurface Scattering, 1, Specular Color, 2)] _MaterialID("MaterialId", Int) = 0
[ToggleOff] _EnablePerPixelDisplacement("Enable per pixel displacement", Float) = 0.0
_PPDMinSamples("Min sample for POM", Range(1.0, 64.0)) = 5

#pragma shader_feature _ANISOTROPYMAP
#pragma shader_feature _DETAIL_MAP
#pragma shader_feature _SUBSURFACE_RADIUS_MAP
#pragma shader_feature _THICKNESS_MAP
#pragma shader_feature _THICKNESSMAP
#pragma shader_feature _SPECULARCOLORMAP
#pragma shader_feature _VERTEX_WIND
#pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON

2
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitData.hlsl


surfaceData.subsurfaceRadius = 1.0;
surfaceData.thickness = 0.0;
surfaceData.subsurfaceProfile = 0;
surfaceData.coatNormalWS = float3(1.0, 0.0, 0.0);
surfaceData.coatPerceptualSmoothness = 1.0;
surfaceData.specularColor = float3(0.0, 0.0, 0.0);
GetNormalAndTangentWS(input, V, normalTS, surfaceData.normalWS, surfaceData.tangentWS);

11
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitDataInternal.hlsl


surfaceData.subsurfaceRadius *= SAMPLE_UVMAPPING_TEXTURE2D(_SubsurfaceRadiusMap, sampler_SubsurfaceRadiusMap, layerTexCoord.base).r;
#endif
#ifdef _THICKNESS_MAP
#ifdef _THICKNESSMAP
surfaceData.coatNormalWS = float3(1.0, 0.0, 0.0);
surfaceData.coatPerceptualSmoothness = 1.0;
surfaceData.specularColor = float3(0.0, 0.0, 0.0);
surfaceData.specularColor = _SpecularColor.rgb;
#ifdef _SPECULARCOLORMAP
surfaceData.specularColor *= SAMPLE_UVMAPPING_TEXTURE2D(_SpecularColorMap, sampler_SpecularColorMap, layerTexCoord.base).rgb;
#endif
#else // #if !defined(LAYERED_LIT_SHADER)

surfaceData.thickness = 0.0;
surfaceData.subsurfaceProfile = 0;
surfaceData.coatNormalWS = float3(1.0, 0.0, 0.0);
surfaceData.coatPerceptualSmoothness = 0.0;
surfaceData.specularColor = float3(0.0, 0.0, 0.0);
#endif // #if !defined(LAYERED_LIT_SHADER)

10
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitProperties.hlsl


TEXTURE2D(_ThicknessMap);
SAMPLER2D(sampler_ThicknessMap);
// float _CoatCoverage;
//TEXTURE2D(_CoatCoverageMap);
//SAMPLER2D(sampler_CoatCoverageMap);
// float _CoatRoughness;
//TEXTURE2D(_CoatRoughnessMap);
//SAMPLER2D(sampler_CoatRoughnessMap);
float4 _SpecularColor;
TEXTURE2D(_SpecularColorMap);
SAMPLER2D(sampler_SpecularColorMap);
float _TexWorldScale;
float4 _UVMappingMask;

14
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/LitTessellation.shader


_Thickness("Thickness", Range(0.0, 1.0)) = 1.0
_ThicknessMap("Thickness Map", 2D) = "white" {}
_SpecularColor("SpecularColor", Color) = (1, 1, 1, 1)
_SpecularColorMap("SpecularColorMap", 2D) = "white" {}
// Wind
[ToggleOff] _EnableWind("Enable Wind", Float) = 0.0
_InitialBend("Initial Bend", float) = 1.0

_ShiverDirectionality("Shiver Directionality", Range(0.0, 1.0)) = 0.5
//_CoatCoverage("CoatCoverage", Range(0.0, 1.0)) = 0
//_CoatCoverageMap("CoatCoverageMapMap", 2D) = "white" {}
//_CoatRoughness("CoatRoughness", Range(0.0, 1.0)) = 0
//_CoatRoughnessMap("CoatRoughnessMap", 2D) = "white" {}
_DistortionVectorMap("DistortionVectorMap", 2D) = "black" {}

[HideInInspector] _UVMappingMask("_UVMappingMask", Color) = (1, 0, 0, 0)
[Enum(TangentSpace, 0, ObjectSpace, 1)] _NormalMapSpace("NormalMap space", Float) = 0
[Enum(Standard, 0, Subsurface Scattering, 1, Clear Coat, 2, Specular Color, 3)] _MaterialID("MaterialId", Int) = 0
[Enum(Standard, 0, Subsurface Scattering, 1, Specular Color, 2)] _MaterialID("MaterialId", Int) = 0
[ToggleOff] _EnablePerPixelDisplacement("Enable per pixel displacement", Float) = 0.0
_PPDMinSamples("Min sample for POM", Range(1.0, 64.0)) = 5

#pragma shader_feature _ANISOTROPYMAP
#pragma shader_feature _DETAIL_MAP
#pragma shader_feature _SUBSURFACE_RADIUS_MAP
#pragma shader_feature _THICKNESS_MAP
#pragma shader_feature _THICKNESSMAP
#pragma shader_feature _SPECULARCOLORMAP
#pragma shader_feature _VERTEX_WIND
#pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON

8
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/Resources/CombineSubsurfaceScattering.shader


#pragma vertex Vert
#pragma fragment Frag
#pragma shader_feature _ SSS_PRE_SCATTER_TEXTURING SSS_POST_SCATTER_TEXTURING
#pragma multi_compile _ FILTER_HORIZONTAL_AND_COMBINE
#pragma multi_compile _ SSS_FILTER_HORIZONTAL_AND_COMBINE
//-------------------------------------------------------------------------------------
// Include

float stepSizeY = rcp(fragheight);
// Compute the filtering direction.
#ifdef FILTER_HORIZONTAL_AND_COMBINE
#ifdef SSS_FILTER_HORIZONTAL_AND_COMBINE
float stepSize = stepSizeX;
float2 unitDirection = float2(1, 0);
#else

totalWeight += sampleWeight;
}
#ifdef FILTER_HORIZONTAL_AND_COMBINE
#ifdef SSS_FILTER_HORIZONTAL_AND_COMBINE
bool performPostScatterTexturing = IsBitSet(_TexturingModeFlags, profileID);
// It's either post-scatter, or pre- and post-scatter texturing.

10
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/Lit/SubsurfaceScatteringProfile.cs


private class Styles
{
public readonly GUIContent sssProfilePreview0 = new GUIContent("Profile Preview");
public readonly GUIContent sssProfilePreview1 = new GUIContent("Shows the fraction of light scattered from the source as radius increases to 1.");
public readonly GUIContent sssProfilePreview1 = new GUIContent("Shows the fraction of light scattered from the source as the radius increases to 1.");
public readonly GUIContent sssTransmittancePreview1 = new GUIContent("Shows the fraction of light passing through the object as thickness increases to 1.");
public readonly GUIContent sssTransmittancePreview1 = new GUIContent("Shows the fraction of light passing through the object for thickness values from the remap.");
public readonly GUIContent sssTransmittancePreview2 = new GUIContent("Can be thought of as a cross section of a slab of material illuminated by a white light from the left.");
public readonly GUIContent sssProfileStdDev1 = new GUIContent("Standard Deviation #1", "Determines the shape of the 1st Gaussian filter. Increases the strength and the radius of the blur of the corresponding color channel.");
public readonly GUIContent sssProfileStdDev2 = new GUIContent("Standard Deviation #2", "Determines the shape of the 2nd Gaussian filter. Increases the strength and the radius of the blur of the corresponding color channel.");
public readonly GUIContent sssProfileLerpWeight = new GUIContent("Filter Interpolation", "Controls linear interpolation between the two Gaussian filters.");

};
public readonly GUIContent sssProfileTransmission = new GUIContent("Enable Transmission", "Toggles simulation of light passing through thin objects. Depends on the thickness of the material.");
public readonly GUIContent sssProfileTintColor = new GUIContent("Transmission Tint Color", "Tints transmitted light.");
public readonly GUIContent sssProfileMinMaxThickness = new GUIContent("Min-Max Thickness", "Shows the values of the thickness remap below.");
public readonly GUIContent sssProfileThicknessRemap = new GUIContent("Thickness Remap", "Remaps the thickness parameter from [0, 1] to the desired range.");
public readonly GUIContent sssProfileMinMaxThickness = new GUIContent("Min-Max Thickness", "Shows the values of the thickness remap below (in centimeters).");
public readonly GUIContent sssProfileThicknessRemap = new GUIContent("Thickness Remap", "Remaps the thickness parameter from [0, 1] to the desired range (in centimeters).");
public readonly GUIStyle centeredMiniBoldLabel = new GUIStyle(GUI.skin.label);

EditorGUILayout.Space();
EditorGUILayout.LabelField(styles.sssTransmittancePreview0, styles.centeredMiniBoldLabel);
EditorGUILayout.LabelField(styles.sssTransmittancePreview1, EditorStyles.centeredGreyMiniLabel);
EditorGUILayout.LabelField(styles.sssTransmittancePreview2, EditorStyles.centeredGreyMiniLabel);
EditorGUILayout.Space();
// Draw the transmittance graph.

4
Assets/ScriptableRenderPipeline/HDRenderPipeline/Material/MaterialUtilities.hlsl


}
// This function convert the tangent space normal/tangent to world space and orthonormalize it + apply a correction of the normal if it is not pointing towards the near plane
void GetNormalAndTangentWS(FragInputs input, float3 V, float3 normalTS, inout float3 normalWS, inout float3 tangentWS, bool wantNegativeNormal = false)
void GetNormalAndTangentWS(FragInputs input, float3 V, float3 normalTS, inout float3 normalWS, inout float3 tangentWS)
{
#ifdef SURFACE_GRADIENT
normalWS = SurfaceGradientResolveNormal(input.worldToTangent[2], normalTS);

GetShiftedNdotV(normalWS, V, wantNegativeNormal);
// Orthonormalize the basis vectors using the Gram-Schmidt process.
// We assume that the length of the surface normal is sufficiently close to 1.

2
Assets/ScriptableRenderPipeline/HDRenderPipeline/ShaderPass/ShaderPassForward.hlsl


#endif
#ifdef DEBUG_DISPLAY
if (_DebugDisplayMode == DEBUGDISPLAYMODE_VIEW_MATERIAL)
if (_DebugViewMaterial != 0)
{
float3 result = float3(1.0, 0.0, 1.0);
bool needLinearToSRGB = false;

1
Assets/ScriptableRenderPipeline/HDRenderPipeline/Utilities.cs


None = 0,
SSS = 0 + Lit.MaterialId.LitSSS, // 1
Standard = 2 + Lit.MaterialId.LitStandard, // 2
ClearCoat = 1 + Lit.MaterialId.LitClearCoat, // 3
All = 255 // 0xff
}

36
Assets/ScriptableRenderPipeline/HDRenderPipeline/Wind/3DNoise.psd.meta


fileFormatVersion: 2
guid: fcecce6d2c9be8d418a27f0658a2210d
timeCreated: 1490775966
timeCreated: 1493292037
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}

linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:

allowsAlphaSplitting: 0
overridden: 0
- buildTarget: PS4
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: iPhone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: tvOS
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Windows Store Apps
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: WebGL
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0

144
Assets/ScriptableRenderPipeline/ShaderLibrary/AreaLighting.hlsl


#ifndef UNITY_AREA_LIGHTING_INCLUDED
#define UNITY_AREA_LIGHTING_INCLUDED
#define SPHERE_LIGHT_APPROXIMATION
#define APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
#define APPROXIMATE_SPHERE_LIGHT_NUMERICALLY
// Not normalized by the factor of 1/TWO_PI.
float3 ComputeEdgeFactor(float3 V1, float3 V2)

// N.b.: this function accounts for horizon clipping.
float DiffuseSphereLightIrradiance(float sinSqSigma, float cosOmega)
{
float sinSqOmega = saturate(1 - cosOmega * cosOmega);
#if 0 // Ref: Area Light Sources for Real-Time Graphics, page 4 (1996).
float cosSqSigma = saturate(1 - sinSqSigma);
float sinSqGamma = saturate(cosSqSigma / sinSqOmega);
float cosSqGamma = saturate(1 - sinSqGamma);
#ifdef APPROXIMATE_SPHERE_LIGHT_NUMERICALLY
float x = sinSqSigma;
float y = cosOmega;
float sinSigma = sqrt(sinSqSigma);
float sinGamma = sqrt(sinSqGamma);
float cosGamma = sqrt(cosSqGamma);
float sigma = asin(sinSigma);
float omega = acos(cosOmega);
float gamma = asin(sinGamma);
#if 1
// Use a numerical fit found in Mathematica.
// For most of the domain, the absolute error is fairly low, under 0.005.
// You can use the following Mathematica code to reproduce our results:
// t = Flatten[Table[{x, y, f[x, y]}, {x, 0, 0.999999, 0.001}, {y, -0.999999, 0.999999, 0.002}], 1]
// m = NonlinearModelFit[t, x * (y + e) * (0.5 + (y - e) * (a + b * x + c * x^2 + d * x^3)), {a, b, c, d, e}, {x, y}]
return saturate(x * (0.9245867471551246 + y) * (0.5 + (-0.9245867471551246 + y) * (0.5359050373687144 + x * (-1.0054221851257754 + x * (1.8199061187417047 - x * 1.3172081704209504)))));
#else
// Another fit found with Mathematica. The absolute error is larger (around 0.02 on average), but the function is very smooth.
// You can use the following Mathematica code to reproduce our results:
// t = Flatten[Table[{x, y, f[x, y]}, {x, 0, 0.999999, 0.001}, {y, -0.999999, 0.999999, 0.002}], 1]
// m = NonlinearModelFit[t, 1 - (1 - x)^(a * (y + 1) + b * (y + 1)^2 + c * (y + 1)^3 + d * (y + 1)^4)}, {a, b, c, d}, {x, y}]
float p = saturate(0.14506085844485772 + y * (0.2858221675641456 + y * (0.23405929637528905 + y * (0.20682928702038633 + y * 0.1135312997643852))));
return saturate(1 - pow(1 - x, p));
#endif
#else
#if 0 // Ref: Area Light Sources for Real-Time Graphics, page 4 (1996).
float sinSqOmega = saturate(1 - cosOmega * cosOmega);
float cosSqSigma = saturate(1 - sinSqSigma);
float sinSqGamma = saturate(cosSqSigma / sinSqOmega);
float cosSqGamma = saturate(1 - sinSqGamma);
[branch]
if (omega < 0 || omega >= HALF_PI + sigma)
{
// Full horizon occlusion (case #4).
return 0;
}
float sinSigma = sqrt(sinSqSigma);
float sinGamma = sqrt(sinSqGamma);
float cosGamma = sqrt(cosSqGamma);
float e = sinSqSigma * cosOmega;
float sigma = asin(sinSigma);
float omega = acos(cosOmega);
float gamma = asin(sinGamma);
float irradiance;
if (omega >= HALF_PI + sigma)
{
// Full horizon occlusion (case #4).
return 0;
}
[branch]
if (omega < HALF_PI - sigma)
{
// No horizon occlusion (case #1).
irradiance = e;
}
else
{
float g = (-2 * sqrt(sinSqOmega * cosSqSigma) + sinGamma) * cosGamma + (HALF_PI - gamma);
float h = cosOmega * (cosGamma * sqrt(saturate(sinSqSigma - cosSqGamma)) + sinSqSigma * asin(saturate(cosGamma / sinSigma)));
float e = sinSqSigma * cosOmega;
if (omega < HALF_PI)
[branch]
if (omega < HALF_PI - sigma)
// Partial horizon occlusion (case #2).
irradiance = e + INV_PI * (g - h);
// No horizon occlusion (case #1).
return e;
// Partial horizon occlusion (case #3).
irradiance = INV_PI * (g + h);
float g = (-2 * sqrt(sinSqOmega * cosSqSigma) + sinGamma) * cosGamma + (HALF_PI - gamma);
float h = cosOmega * (cosGamma * sqrt(saturate(sinSqSigma - cosSqGamma)) + sinSqSigma * asin(saturate(cosGamma / sinSigma)));
if (omega < HALF_PI)
{
// Partial horizon occlusion (case #2).
return saturate(e + INV_PI * (g - h));
}
else
{
// Partial horizon occlusion (case #3).
return saturate(INV_PI * (g + h));
}
}
#else // Ref: Moving Frostbite to Physically Based Rendering, page 47 (2015).
float irradiance;
#else // Ref: Moving Frostbite to Physically Based Rendering, page 47 (2015, optimized).
float cosSqOmega = cosOmega * cosOmega; // y^2
if (cosOmega * cosOmega > sinSqSigma)
{
irradiance = sinSqSigma * saturate(cosOmega);
}
else
{
float a = 1 / sinSqSigma - 1;
float w = rsqrt(a);
float x = sqrt(a);
float y = -x * cosOmega * rsqrt(sinSqOmega);
float z = sqrt(sinSqOmega * (1 - y * y));
irradiance = INV_PI * ((cosOmega * acos(y) - x * z) * sinSqSigma + atan(z * w));
}
[branch]
if (cosSqOmega > sinSqSigma) // (y^2)>x
{
return saturate(sinSqSigma * cosOmega); // Clip[x*y,{0,1}]
}
else
{
float cotSqSigma = rcp(sinSqSigma) - 1; // 1/x-1
float tanSqSigma = rcp(cotSqSigma); // x/(1-x)
float sinSqOmega = 1 - cosSqOmega; // 1-y^2
float w = sinSqOmega * tanSqSigma; // (1-y^2)*(x/(1-x))
float x = -cosOmega * rsqrt(w); // -y*Sqrt[(1/x-1)/(1-y^2)]
float y = sqrt(sinSqOmega * tanSqSigma - cosSqOmega); // Sqrt[(1-y^2)*(x/(1-x))-y^2]
float z = y * cotSqSigma; // Sqrt[(1-y^2)*(x/(1-x))-y^2]*(1/x-1)
float a = cosOmega * acos(x) - z; // y*ArcCos[-y*Sqrt[(1/x-1)/(1-y^2)]]-Sqrt[(1-y^2)*(x/(1-x))-y^2]*(1/x-1)
float b = atan(y); // ArcTan[Sqrt[(1-y^2)*(x/(1-x))-y^2]]
// Replacing max() with saturate() results in a 12 cycle SGPR forwarding stall on PS4.
return max(INV_PI * (a * sinSqSigma + b), 0); // (a/Pi)*x+(b/Pi)
}
#endif
return max(irradiance, 0);
#ifdef SPHERE_LIGHT_APPROXIMATION
for (int i = 0; i < 4; i++)
#ifdef APPROXIMATE_POLY_LIGHT_AS_SPHERE_LIGHT
[unroll]
for (uint i = 0; i < 4; i++)
{
L[i] = normalize(L[i]);
}

for (int edge = 0; edge < 4; edge++)
[unroll]
for (uint edge = 0; edge < 4; edge++)
{
float3 V1 = L[edge];
float3 V2 = L[(edge + 1) % 4];

// Clamp invalid values to avoid visual artifacts.
float sinSqSigma = sqrt(f2);
float sinSqSigma = min(sqrt(f2), 0.999);
float cosOmega = clamp(F.z * rsqrt(f2), -1, 1);
return DiffuseSphereLightIrradiance(sinSqSigma, cosOmega);

19
Assets/ScriptableRenderPipeline/ShaderLibrary/CommonLighting.hlsl


// Helper functions
//-----------------------------------------------------------------------------
// NdotV should not be negative for visible pixels, but it can happen due to the
// perspective projection and the normal mapping + decals. In that case, the normal
// should be modified to become valid (i.e facing the camera) to avoid weird artifacts.
// Note: certain applications (e.g. SpeedTree) require to still have negative normal to perform their own two sided lighting, they can use wantNegativeNormal
// This will potentially reduce the length of the normal at edges of geometry.
float GetShiftedNdotV(inout float3 N, float3 V, bool wantNegativeNormal)
// NdotV can be negative for visible pixels due to the perspective projection, the normal mapping and decals.
// This can produce visible artifacts with direct specular lighting (white point, black point) and indirect specular (artifact with cubemap fetch)
// A way to reduce artifact is to limit NdotV value to not be negative and calculate reflection vector for cubemap with a shifted normal (i.e what depends on the view)
// This is what provide this function
// Note: NdotV return by this function is always positive, no need for saturate
float GetShiftedNdotV(inout float3 N, float3 V, float NdotV)
float NdotV = dot(N, V);
float limit = rcp(256.0); // Determined mostly by the quality of the G-buffer normal encoding
const float limit = 0.0001; // Epsilon value that avoid divide by 0 (several BSDF divide by NdotV)
if (!wantNegativeNormal && NdotV < limit)
if (NdotV < limit)
// We do not renormalize the normal because { abs(length(N) - 1.0) < limit }.
// We do not renormalize the normal because { abs(length(N) - 1.0) < limit } + It is use for cubemap
N += (-NdotV + limit) * V;
NdotV = limit;
}

76
Assets/ScriptableRenderPipeline/ShaderLibrary/Packing.hlsl


// Normal packing
//-----------------------------------------------------------------------------
float3 PackNormalCartesian(float3 n)
{
return n * 0.5 + 0.5;
}
float3 UnpackNormalCartesian(float3 n)
{
return normalize(n * 2.0 - 1.0);
}
float3 PackNormalMaxComponent(float3 n)
{
// TODO: use max3

return normalize(n);
}
// Tetrahedral encoding - Looks like Tetra encoding 10:10 + 2 is similar to oct 11:11, as oct is cheaper prefer it
// To generate the basisNormal below we use these 4 vertex of a regular tetrahedron
// v0 = float3(1.0, 0.0, -1.0 / sqrt(2.0));
// v1 = float3(-1.0, 0.0, -1.0 / sqrt(2.0));
// v2 = float3(0.0, 1.0, 1.0 / sqrt(2.0));
// v3 = float3(0.0, -1.0, 1.0 / sqrt(2.0));
// Then we normalize the average of each face's vertices
// normalize(v0 + v1 + v2), etc...
static const float3 tetraBasisNormal[4] =
{
float3(0., 0.816497, -0.57735),
float3(-0.816497, 0., 0.57735),
float3(0.816497, 0., 0.57735),
float3(0., -0.816497, -0.57735)
};
// Then to get the local matrix (with z axis rotate to basisNormal) use GetLocalFrame(basisNormal[xxx])
static const float3x3 tetraBasisArray[4] =
{
float3x3(-1., 0., 0.,0., 0.57735, 0.816497,0., 0.816497, -0.57735),
float3x3(0., -1., 0.,0.57735, 0., 0.816497,-0.816497, 0., 0.57735),
float3x3(0., 1., 0.,-0.57735, 0., 0.816497,0.816497, 0., 0.57735),
float3x3(1., 0., 0.,0., -0.57735, 0.816497,0., -0.816497, -0.57735)
};
// Return [-1..1] vector2 oriented in plane of the faceIndex of a regular tetrahedron
float2 PackNormalTetraEncode(float3 n, out uint faceIndex)
{
// Retrieve the tetrahedra's face for the normal direction
// It is the one with the greatest dot value with face normal
float dot0 = dot(n, tetraBasisNormal[0]);
float dot1 = dot(n, tetraBasisNormal[1]);
float dot2 = dot(n, tetraBasisNormal[2]);
float dot3 = dot(n, tetraBasisNormal[3]);
float maxi0 = max(dot0, dot1);
float maxi1 = max(dot2, dot3);
float maxi = max(maxi0, maxi1);
// Get the index from the greatest dot
if (maxi == dot0)
faceIndex = 0;
else if (maxi == dot1)
faceIndex = 1;
else if (maxi == dot2)
faceIndex = 2;
else //(maxi == dot3)
faceIndex = 3;
// Rotate n into this local basis
n = mul(tetraBasisArray[faceIndex], n);
// Project n onto the local plane
return n.xy;
}
// Assume f [-1..1]
float3 UnpackNormalTetraEncode(float2 f, uint faceIndex)
{
// Recover n from local plane
float3 n = float3(f.xy, sqrt(1.0 - dot(f.xy, f.xy)));
// Inverse of transform PackNormalTetraEncode (just swap order in mul as we have a rotation)
return mul(n, tetraBasisArray[faceIndex]);
}
// Unpack from normal map
float3 UnpackNormalRGB(float4 packedNormal, float scale = 1.0)
{
float3 normal;

103
Assets/ScriptableRenderPipeline/common/Camera/CameraSwitcher.cs


private Quaternion m_OriginalCameraRotation;
private Camera m_CurrentCamera = null;
private float m_MessageDuration = 1.0f;
private float m_MessageTimer = 1000.0f;
private static string kDebugNext = "Debug Next";
private static string kDebugPrevious = "Debug Previous";
private string[] m_RequiredInputButtons = { kDebugNext, kDebugPrevious };
private bool m_Valid = true;
GUIContent[] m_CameraNames = null;
int[] m_CameraIndices = null;
void OnEnable()
{

m_Valid = Debugging.CheckRequiredInputButtonMapping(m_RequiredInputButtons);
}
if(m_OriginalCamera == null)
{
Debug.LogError("Camera Switcher needs a Camera component attached");
return;
}
int GetCameraCount()
{
return m_Cameras.Length + 1; // We need +1 for handling the original camera.
}
m_CurrentCameraIndex = GetCameraCount() - 1;
void NextCamera()
{
m_CurrentCameraIndex = (m_CurrentCameraIndex + 1) % GetCameraCount();
m_CameraNames = new GUIContent[GetCameraCount()];
m_CameraIndices = new int[GetCameraCount()];
for (int i = 0; i < m_Cameras.Length; ++i)
{
Camera cam = m_Cameras[i];
if (cam != null)
{
m_CameraNames[i] = new GUIContent(cam.name);
}
else
{
m_CameraNames[i] = new GUIContent("null");
}
m_CameraIndices[i] = i;
}
m_CameraNames[GetCameraCount() - 1] = new GUIContent("Original Camera");
m_CameraIndices[GetCameraCount() - 1] = GetCameraCount() - 1;
DebugMenuManager.instance.AddDebugItem<int>("Camera", "Camera Switcher", () => m_CurrentCameraIndex, (value) => SetCameraIndex((int)value), false, new DebugItemDrawerIntEnum(m_CameraNames, m_CameraIndices));
void PreviousCamera()
int GetCameraCount()
m_CurrentCameraIndex = m_CurrentCameraIndex - 1;
if (m_CurrentCameraIndex == -1)
m_CurrentCameraIndex = m_Cameras.Length;
return m_Cameras.Length + 1; // We need +1 for handling the original camera.
}
Camera GetNextCamera()

return m_Cameras[m_CurrentCameraIndex];
}
void Update()
void SetCameraIndex(int index)
if (m_Valid && Debugging.debugControlEnabled && m_OriginalCamera != null)
if(index > 0 || index < GetCameraCount())
m_MessageTimer += Time.deltaTime;
bool needUpdateCamera = false;
if (Input.GetButtonDown(kDebugNext))
{
NextCamera();
needUpdateCamera = true;
}
m_CurrentCameraIndex = index;
if (Input.GetButtonDown(kDebugPrevious))
if (m_CurrentCamera == m_OriginalCamera)
PreviousCamera();
needUpdateCamera = true;
m_OriginalCameraPosition = m_OriginalCamera.transform.position;
m_OriginalCameraRotation = m_OriginalCamera.transform.rotation;
if (needUpdateCamera)
m_CurrentCamera = GetNextCamera();
if (m_CurrentCamera != null)
m_MessageTimer = 0.0f;
// If we witch back to the original camera, put back the transform in it.
m_OriginalCameraPosition = m_OriginalCamera.transform.position;
m_OriginalCameraRotation = m_OriginalCamera.transform.rotation;
m_OriginalCamera.transform.position = m_OriginalCameraPosition;
m_OriginalCamera.transform.rotation = m_OriginalCameraRotation;
m_CurrentCamera = GetNextCamera();
if (m_CurrentCamera != null)
{
// If we witch back to the original camera, put back the transform in it.
if (m_CurrentCamera == m_OriginalCamera)
{
m_OriginalCamera.transform.position = m_OriginalCameraPosition;
m_OriginalCamera.transform.rotation = m_OriginalCameraRotation;
}
transform.position = m_CurrentCamera.transform.position;
transform.rotation = m_CurrentCamera.transform.rotation;
}
}
if (m_MessageTimer < m_MessageDuration)
{
string cameraName = m_CurrentCamera != null ? m_CurrentCamera.name : "NULL";
string message = string.Format("Switching to camera : {0}", cameraName);
Debugging.PushDebugMessage(message);
transform.position = m_CurrentCamera.transform.position;
transform.rotation = m_CurrentCamera.transform.rotation;
}
}
}

5
Assets/ScriptableRenderPipeline/common/CubeToSpherical.shader


uint2 pixCoord = ((uint2) i.vertex.xy);
half3 dir = SphericalTexCoordinateToDirection(i.texcoord.xy);
half3 res = UNITY_SAMPLE_TEXCUBE_LOD(_srcCubeTexture, dir, (float) _cubeMipLvl).xyz;
return half4(res,1.0);
return (half4) UNITY_SAMPLE_TEXCUBE_LOD(_srcCubeTexture, dir, (float) _cubeMipLvl);
}
ENDCG

3
Assets/ScriptableRenderPipeline/common/TextureCache.cs


{
sliceIndex = m_LocatorInSliceArray[texId];
bFoundAvailOrExistingSlice = true;
#if UNITY_EDITOR
if(m_TextureCacheVersion!=s_GlobalTextureCacheVersion)
{
m_TextureCacheVersion++;

#endif
//assert(m_SliceArray[sliceIndex].TexID==TexID);
}

28
Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/DragonStatue.mat


m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecularColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecularOcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}

m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubsurfaceRadiusMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}

- _DistortionDepthTest: 0
- _DistortionEnable: 0
- _DistortionOnly: 0
- _DoubleSidedEnable: 0
- _DoubleSidedMirrorEnable: 1
- _Drag: 1
- _EnableWind: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1

- _InitialBend: 1
- _StencilRef: 1
- _Metallic: 0
- _Mode: 0
- _NormalDetailMul: 0.347

- _PPDLodThreshold: 5
- _ShiverDirectionality: 0.5
- _ShiverDrag: 0.2
- _Smoothness: 1
- _SmoothnessAO: 0
- _SmoothnessAv: 0.499

- _SrcBlend: 1
- _StencilRef: 2
- _Stiffness: 1
- _SubsurfaceProfile: 0
- _SubsurfaceRadius: 1
- _SurfaceType: 0
- _Tess: 8
- _TessFar: 1

- _TessellationObjectScale: 1
- _TessellationShapeFactor: 0.75
- _TexWorldScale: 1
- _Thickness: 1
- _Tiling: 1
- _TilingDetail: 6
- _UVBase: 0

m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.9862069, g: 0.9862069, b: 0.9862069, a: 1}
- _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}

900
Assets/TestScenes/HDTest/HDRenderLoopTest.unity
文件差异内容过多而无法显示
查看文件

3
ProjectSettings/EditorBuildSettings.asset


- enabled: 1
path: Assets/TestScenes/HDTest/HDRenderLoopTest.unity
guid: 0b16df2ba8fd0f244a826da853bc2d3b
- enabled: 0
path: Assets/TestScenes/HDTest/NewBatcherBench1.unity
guid: efeef759b5144ef4fa1cfc182ddbaea5

96
ProjectSettings/InputManager.asset


type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Horizontal
descriptiveName:
descriptiveNegativeName:
negativeButton: left
positiveButton: right
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 2
axis: 5
joyNum: 0
- serializedVersion: 3
m_Name: Debug Vertical
descriptiveName:
descriptiveNegativeName:
negativeButton: down
positiveButton: up
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 2
axis: 6
joyNum: 0
- serializedVersion: 3
m_Name: Debug Horizontal
descriptiveName:
descriptiveNegativeName:
negativeButton: left
positiveButton: right
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 6
joyNum: 0
- serializedVersion: 3
m_Name: Debug Vertical
descriptiveName:
descriptiveNegativeName:
negativeButton: down
positiveButton: up
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 6
joyNum: 0
- serializedVersion: 3
m_Name: Debug Validate
descriptiveName:
descriptiveNegativeName:
negativeButton: return
positiveButton:
altNegativeButton: joystick button 0
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 6
joyNum: 0
- serializedVersion: 3
m_Name: Debug Persistent
descriptiveName:
descriptiveNegativeName:
negativeButton: right shift
positiveButton:
altNegativeButton: joystick button 2
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 6
joyNum: 0

14
ProjectSettings/ProjectSettings.asset


captureSingleScreen: 0
muteOtherAudioSources: 0
Prepare IOS For Recording: 0
Force IOS Speakers When Recording: 0
submitAnalytics: 1
usePlayerLog: 1
bakeCollisionMeshes: 0

macAppStoreCategory: public.app-category.games
gpuSkinning: 0
graphicsJobs: 1
xboxPIXTextureCapture: 0

m_Height: 128
m_BuildTargetBatching:
- m_BuildTarget: Standalone
m_StaticBatching: 0
m_StaticBatching: 1
m_DynamicBatching: 0
- m_BuildTarget: iPhone
m_StaticBatching: 0

wiiUGamePadStartupScreen: {fileID: 0}
wiiUDrcBufferDisabled: 0
wiiUProfilerLibPath:
playModeTestRunnerEnabled: 0
actionOnDotNetUnhandledException: 1
enableInternalProfiler: 0
logObjCUncaughtExceptions: 1

ps4GarlicHeapSize: 2048
ps4ProGarlicHeapSize: 2560
ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
ps4UseDebugIl2cppLibs: 0
ps4pnSessions: 1
ps4pnPresence: 1
ps4pnFriends: 1

psp2UseLibLocation: 0
psp2InfoBarOnStartup: 0
psp2InfoBarColor: 0
psp2UseDebugIl2cppLibs: 0
psp2ScriptOptimizationLevel: 0
psmSplashimage: {fileID: 0}
splashScreenBackgroundSourceLandscape: {fileID: 0}
splashScreenBackgroundSourcePortrait: {fileID: 0}

incrementalIl2cppBuild:
iOS: 0
additionalIl2CppArgs:
scriptingRuntimeVersion: 0
apiCompatibilityLevelPerPlatform: {}
m_RenderingPath: 1
m_MobileRenderingPath: 1

tizenMicrophonePermissions: 0
tizenDeploymentTarget:
tizenDeploymentTargetType: 0
tizenMinOSVersion: 0
tizenMinOSVersion: 1
n3dsUseExtSaveData: 0
n3dsCompressStaticMem: 1
n3dsExtSaveDataNumber: 0x12345

projectName:
organizationId:
cloudEnabled: 0
enableNewInputSystem: 0
enableNativePlatformBackendsForNewInputSystem: 0
disableOldInputManagerSupport: 0

2
ProjectSettings/QualitySettings.asset


softVegetation: 1
realtimeReflectionProbes: 1
billboardsFaceCameraPosition: 1
vSyncCount: 1
vSyncCount: 0
lodBias: 2
maximumLODLevel: 0
particleRaycastBudget: 4096

1
Assets/ScriptableRenderPipeline/ShaderGenerator/Editor/ShaderGeneratorMenu.cs


static void GenerateShaderIncludes()
{
CSharpToHLSL.GenerateAll();
UnityEditor.AssetDatabase.Refresh();
}
}
}

9
Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile.meta


fileFormatVersion: 2
guid: a0ba759eadcfdcc44bc08adad4960ed0
folderAsset: yes
timeCreated: 1493162006
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/ScriptableRenderPipeline/PostProcessing.meta


fileFormatVersion: 2
guid: f9e0215129f26be429b86e3119cc9a5c
folderAsset: yes
timeCreated: 1493295523
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/ScriptableRenderPipeline/common/Debugging.meta


fileFormatVersion: 2
guid: 58a02e8711d94134393b2a8ac22b96ca
folderAsset: yes
timeCreated: 1491989728
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

221
Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/DragonStatueSpecular.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: DragonStatueSpecular
m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DEPTHOFFSETENABLE_OFF _DETAIL_MAP_WITH_NORMAL
_DISTORTIONDEPTHTEST_OFF _DISTORTIONENABLE_OFF _DISTORTIONONLY_OFF _EMISSION _ENABLEPERPIXELDISPLACEMENT_OFF
_HEIGHTMAP _MASKMAP _NORMALMAP _NORMALMAP_TANGENT_SPACE _SPECULARCOLORMAP _TESSELLATION_DISPLACEMENT
_TESSELLATION_OBJECT_SCALE
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses:
- DistortionVectors
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AnisotropyMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseColorMap:
m_Texture: {fileID: 2800000, guid: d2472fab9be6dd4479dd5895a5055413, 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}
- _DetailMap:
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}
- _DispTex:
m_Texture: {fileID: 2800000, guid: 57044228904fe56449ead7efc223e4ad, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortionVectorMap:
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}
- _EmissiveColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _HeightMap:
m_Texture: {fileID: 2800000, guid: 57044228904fe56449ead7efc223e4ad, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MSK:
m_Texture: {fileID: 2800000, guid: e31d177bc8c9381439c9b327a2636d3e, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: d2472fab9be6dd4479dd5895a5055413, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskMap:
m_Texture: {fileID: 2800000, guid: e31d177bc8c9381439c9b327a2636d3e, 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}
- _NormalMap:
m_Texture: {fileID: 2800000, guid: 75bfcd5e2d2d5954ca601a85db5d1a73, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMapDetail:
m_Texture: {fileID: 2800000, guid: ad9cb02bddceb1340bc1fcb19d5f35bd, type: 3}
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}
- _SpecularColorMap:
m_Texture: {fileID: 2800000, guid: 53cf1b46cfd6ff347aad6fd4c6e1ea1e, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecularOcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubSurfaceRadiusMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubsurfaceRadiusMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _AlphaCutoff: 0.5
- _AlphaCutoffEnable: 0
- _Anisotropy: 0
- _BlendMode: 0
- _BumpScale: 1
- _CullMode: 2
- _Cutoff: 0.5
- _DepthOffsetEnable: 0
- _DetailAOScale: 1
- _DetailAlbedoScale: 1
- _DetailHeightScale: 1
- _DetailMapMode: 0
- _DetailNormalMapScale: 1
- _DetailNormalScale: 1
- _DetailSmoothnessScale: 1
- _Displacement: 0.008
- _DisplacementCenter: 0.36
- _DisplacementfalloffFar: 150
- _DisplacementfalloffNear: 30
- _DistortionDepthTest: 0
- _DistortionEnable: 0
- _DistortionOnly: 0
- _DoubleSidedEnable: 0
- _DoubleSidedMirrorEnable: 1
- _DoubleSidedMode: 0
- _Drag: 1
- _DstBlend: 0
- _EmissiveColorMode: 1
- _EmissiveIntensity: 0
- _EnablePerPixelDisplacement: 0
- _EnableWind: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _HeightAmplitude: 0
- _HeightCenter: 0
- _HorizonFade: 1
- _InitialBend: 1
- _MaterialID: 2
- _Metallic: 0
- _Mode: 0
- _NormalDetailMul: 0.347
- _NormalMapSpace: 0
- _NormalScale: 1
- _OcclusionStrength: 1
- _PPDLodThreshold: 5
- _PPDMaxSamples: 15
- _PPDMinSamples: 5
- _Parallax: 0.02
- _ShiverDirectionality: 0.5
- _ShiverDrag: 0.2
- _Smoothness: 1
- _SmoothnessAO: 0
- _SmoothnessAv: 0.499
- _SmoothnessTextureChannel: 0
- _SmoothnessVar: 0.491
- _SpecularHighlights: 1
- _SrcBlend: 1
- _StencilRef: 3
- _Stiffness: 1
- _SubsurfaceProfile: 0
- _SubsurfaceRadius: 1
- _SurfaceType: 0
- _Tess: 8
- _TessFar: 1
- _TessNear: 0.2
- _TessellationBackFaceCullEpsilon: -0.25
- _TessellationFactor: 4
- _TessellationFactorMaxDistance: 50
- _TessellationFactorMinDistance: 20
- _TessellationFactorTriangleSize: 100
- _TessellationMode: 1
- _TessellationObjectScale: 1
- _TessellationShapeFactor: 0.75
- _TexWorldScale: 1
- _Thickness: 1
- _Tiling: 1
- _TilingDetail: 6
- _UVBase: 0
- _UVDetail: 0
- _UVMappingPlanar: 0
- _UVSec: 0
- _ZTestMode: 8
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.9862069, g: 0.9862069, b: 0.9862069, a: 1}
- _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}

8
Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/DragonStatueSpecular.mat.meta


fileFormatVersion: 2
guid: fe109261e26646f4b88bc8153a24ecc3
timeCreated: 1480931890
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

610
Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/Dragon_specular.psd


8BPSM8BIM%8BIM$7�<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<xmp:CreatorTool>Adobe Photoshop CC 2017 (Windows)</xmp:CreatorTool>
<xmp:CreateDate>2017-03-29T10:26:04+02:00</xmp:CreateDate>
<xmp:MetadataDate>2017-03-29T10:45:22+02:00</xmp:MetadataDate>
<xmp:ModifyDate>2017-03-29T10:45:22+02:00</xmp:ModifyDate>
<dc:format>application/vnd.adobe.photoshop</dc:format>
<xmpMM:InstanceID>xmp.iid:62fdb28d-db2d-a842-974d-32399f2be92d</xmpMM:InstanceID>
<xmpMM:DocumentID>xmp.did:84481483-4ba5-8b4d-8ed3-aa1f69d35c61</xmpMM:DocumentID>
<xmpMM:OriginalDocumentID>xmp.did:84481483-4ba5-8b4d-8ed3-aa1f69d35c61</xmpMM:OriginalDocumentID>
<xmpMM:History>
<rdf:Seq>
<rdf:li rdf:parseType="Resource">
<stEvt:action>created</stEvt:action>
<stEvt:instanceID>xmp.iid:84481483-4ba5-8b4d-8ed3-aa1f69d35c61</stEvt:instanceID>
<stEvt:when>2017-03-29T10:26:04+02:00</stEvt:when>
<stEvt:softwareAgent>Adobe Photoshop CC 2017 (Windows)</stEvt:softwareAgent>
</rdf:li>
<rdf:li rdf:parseType="Resource">
<stEvt:action>saved</stEvt:action>
<stEvt:instanceID>xmp.iid:62fdb28d-db2d-a842-974d-32399f2be92d</stEvt:instanceID>
<stEvt:when>2017-03-29T10:45:22+02:00</stEvt:when>
<stEvt:softwareAgent>Adobe Photoshop CC 2017 (Windows)</stEvt:softwareAgent>
<stEvt:changed>/</stEvt:changed>
</rdf:li>
</rdf:Seq>
</xmpMM:History>
<photoshop:ColorMode>3</photoshop:ColorMode>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>8BIM: printOutputPstSboolInteenumInteClrmprintSixteenBitbool printerNameTEXTCanon iR-ADV C2220/2230 PCL6printProofSetupObjc Proof Setup
proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@o�Grn doub@o�Bl doub@o�BrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R
vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIM�HH8BIM&?�8BIM Z8BIM8BIM� 8BIM'
8BIM�H/fflff/ff���2Z5-8BIM�p��������������������������������������������������������������������������������������������8BIM@@8BIM8BIM5nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum
ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong
leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?�8BIM8BIM8BIM
����,
����� Adobe_CM��Adobed����   
        ����"��
��?

 3!1AQa"q�2���B#$R�b34r��C%�S���cs5���&D�TdE£t6�U�e�����u��F'���������������Vfv��������7GWgw��������5!1AQaq"2����B#�R��3$b�r��CScs4�%���&5��D�T�dEU6te������u��F���������������Vfv��������'7GWgw������� ?��Bv2
�*.�Z�2Vܵ&1�K� ��K�#�f5�n��⠖��c��b���I�F�H��m.��!�6񎪹��T�ou`:fPm��V�6�&�U�>\{D*v�ϒ� ,�6<��(��4�V���Qk{�։�K��� ֓��E��fxN� (�aᕐ֜��Y���9�k���Ȧ�O��v�� TIv�!��o�3
nf����b�ڜ�����&��U�ۅj0K�?�����0���U�P��Q{$B���U��K �V��n�D7��7���q7l6��Nnwn@KT�a)��m h��tPs��w����
9kJ��v�������S��nӎvQ�{#��(u���mU�D��|�� t�qw�BqvMR�H�HW�)my�=��:b8������j�tR �*����p����PӢ�XR5�(�\ Vd���ѪӕN9V� �iD(2swg��5��tW�YE^߂X��tk��h>���Yp�Fv5ݔf�j)@��� ��㪚̍��&����H4�S���� µ���V-���4D���3*X�gF�2^�x�Aӕ��MBv��S�`An�vV�|Uj50U����'�Q<,}> �>�q.���y*9r�˻\�wC��\5���i�Ί��#��Ҽ�†�V�gEI�U�$%�e��5,�EF�r�_�R���g�"�Y�����+��u;G�U�J��Dݵ>�I��x ��K���<&m:-\" 6qd�i��:!
�y(���"�8�u`�[5�M8����|9�(K}" ������E�bB�wdu�
�]��'Dj�^�?,�7w�E�"�i��V��V�g1��KE�Z���AP�N���Z��\�nÐ��������"H��&�}�[W&C�Z�L��[I�����j���:�1�Íu@�7���׵�Y�i��e� Z���oل�_g+��\d��[)!��Hj9���B
��i��YJ��տ�5`
[���b4�� ��@�%����5H�<(���]r)��VK�� h �3*��#X��\©�9�X��#�+�^Я�P 6��J0����ϖ�Xr7��c@��'�*�3�5`�ʄ欳������t�!4AS.܄���rx�&�� J�9�5�Rȵ��S]��+:닉*�\�X�.N�N�C�Bq�[ւ�e񪿆&$˛ѝ�!|P�}�x!ib���$w �! �Dr��<�k���b����}@2Z�0��@��z<:3�Z#l�[��|�P���*y��[��H�� db���Dj���� �6��$�<r��J5m ���j���= � ������hL!8 U �E~\�]�����怩�h�� ����I�����SW@�"�J���eمNٙZ�Di���T�;][�;��IUn=���2���=VB�������2�׈�V����1�m��-P�Dk�)c:�IDU���d�v���N�N��bZ����Ij-D4����Q'Eyƨ�sT���(�i1(uq
�H!dg�5�H��c@�DӁ�Gu1� +<l��1��[�+O�t�I��(%��ͼx��O��;�B�v�P}m�J�x���8x:::2��U|�Wۧ���|
Q4(/�t��*��駊%���C�O�gvዪ G���)�����O &Ya�f�uE�#��F��ܤ������l������Z�fl25�V4�A�Fh�C�v��/��=�[�N�� �Wan�7<l�r֭��~JC@�--r���W%dA��tT,�ouẐ�hr�[K���פ-�� �D�m��J~lѻ �Z7^���l����*/ʩ�Aѵ�u-Gn�P �U��S:�:)c��r� @�:r��dh�]PxVY�/w�d�V�m{9E��Q^���������Ye���v��� ���Q����kFx̤���qh: ��. 5+%�Dj�(��5LY�ξ90u�����}W����!x�!�_FV�s��T��#f���^8�����v �9i������(�@�G
U丘[9�D�a��]�ih �5�T��дi��<�1��tqe�tm��?CMU���I�t �j���ʹ�6�\�l ;���c����aw<k�����E�2�� �|"V�:��`�=��i2��O�t�+F ���'r`�����3A�8�7�[��)�&>_5w5�/,E��C��V�Wy J��ԔI6� �U�v���'D�v�l8�u�����8BIM!]Adobe PhotoshopAdobe Photoshop CC 20178BIM"2MM*bj(1"r2��i��
��'
��'Adobe Photoshop CC 2017 (Windows)2017:03:29 10:45:22�����"*(2HH 8BIMFMsk ��2������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/00//02�42�0�2$47<?BDDEIJLORTWZ^afkotw{~�������������������������������������������������������������������������������������������������������������������~|�{wtqonl�k igffggfdb_\YWV�TV�WVTROLIEB=840-,*('%$"" � $$%'*--/�0�2�4�0�2.458<?BDDEIJMORRVY\^bglqty|������������������������������������������
���������������� ���������������������������������������������������~|{yywtsonn�lkigf�g�fda\YWVV�T�VTVW�YWVTROLGB?840-,*(('%$" � $%'(*,,-/0�2�4202�4+57:=ABDEGILOQRRTVY\adinsw{~����������������������������������������������������������������������������������������������������|{yywvsqo�nlk�igfda\Y�WV�TVWVVWY�Z YWVTQMID?:52/,�*('%$""� "$%'(***,-0200�245778:<=ABEIIJLOQ�RTWZ_bfkqvy~������������������������������������������������������� ��������������������������������������������������������~|{ywwvsq�on�l�kifda^ZY�W�V�WYZ�\ ZYVTROJEA<740-�,*(''%%$�"�$%''((*,-/�024578:<==?ADGJLMMOQ�RTWZ^adioty~������������������������������������������� �������������������������������������������������������������~|{ywwvs�qo�n lkkifba_\Z�Y�Z\�^\ZWVTQMIB=8520/--,,�*('�%�'�(�,-/�02458::<==ABEGJM�OQRRTWZ\_bgnsw|��������������������������������� ��������������������������������������������������������������������������������~|{�ywts�q�sq�nlkigd�a_^ZZ\\�Z�\^__�^ \YWVROJD?:7420�/�-�,*((�'�(�*�-�/0�20458::<=?BEGIJMQQOOQRTVYZ\_bglqv{~������������������������������������������������������������������������������������������������������~|�{ yvtssqqssq�nligfb�a_�^�\^�_�a�_ ^\ZWTQLGB=:754�20/�-,*((*�,�/�0�2458::<?BEIIJLMQR�QRTWYZ^adglqv{|~������������������������������������������������������������� ����������������������� �����������������������������������|{�|yvttsqssqonlkgfd�a�_�^_abab�a _\YVQMIDA=:875�4�2�0/-,**,�-�/�0�2�4578:<=ADGJLMMOQ�R,TVWYZ^adglqvy{|������������������������������������������������������������������������������������ �������������������������������~�|�~|ywvt�sqonlkgdb�a�_�ab�d�b�db_\WROLGDA?=<8755�420/�-/00�2�4�5078:==BDGLMOOQRTTRRTWWYY\_bfkosvwy~���������������������������
�����������������
������������������������������ ������������������������������������������������~�|�~|{ywvtqqoonlkgdbaabbaa_�abddfg�f gfb^YTQMJGDDA?:87755420//0/--//00�5�7 8:<=?BDGLOQQR�T�RT�WY\_dilosvw{~�������������������������������������������������������������������� ����������������������������������������~~�|{wvtqo�nlkgfdbbdda__aabdfg�igfaZVRQMJIGDA=<:8754200220//�02�7�5�7�8 :<<=?DDGLOQR�T(RTTWVVWYZ^bfknqtvy|������������������������������������� ����������������������������������������������������������������������������~��|~|wvtqon�lkgfdbbdda__aabfgi�k�l�kigb^YVTQMMJGDA?=<85220244200�24�8�78�:<�=ADEILOQR�T�V"WYZ^adinqstw{~�������������������������������������������������������������������������������������� ���������������~�|�~|yvtqon�lkgff�dba�_abfikkl�nlkifb^ZWTRQMJGDA?=85�24�5422457�:�<=?�ABDGJLOQR�TVWW�V WY\_dglostwy|�����������������������������������
�����������������������������������������������������������������������������~~�|�~|yvtqon�lkiggfdba_^^__adilloqq�onlkifb_\YWTQMJEB?=87�5�7542478<�=�?AB�DGJMOQR�TVWW�V WYZ_dgkosvwy|�����������������������������������������������������������������������������������������������������������~�|�~|{wtqo�nlkiigfba_^^__adilnq�sqonlkgda^ZVROLGDA=:�875457:<?�ABE�G EDDGJMOQQR�TVW�V�W�Y*Z_bgkostvy~���������������������������������������
�������������������������������������������������������������������������~�|ytsq�onllkigdb_^^__adilns�ts�qolifa^YTQMJGDA=<<�:�<:87578:=ABDDEEDDEIJJIGEEGJM�QR�TVWVVWY�Z\_bgloqsty~������������������������������������������������������������������������������������������������������~~�|yvtsqqoo�nlkigda__aabfilostv�wv�tsqnkfa\WTQMJGDBA?�=�?=:�8:<?BDEGIIGGIJLJIIGGILOQRQR�TVWVVWY�Z^_bgknosty|������������������������������������ ���������������������������������������� �������������������������������������~~||{{yvttsqoo�nlkifd�bdfgknqsvy�{yw�vtqokfa\YVRMJGEDB�A?=�<=BDEGI�J�LJ�IJMOQ�R�TV�W�Y\_adgklosvw{~����������������������������������������������������������������������������������������������������� ��~|{{ywvtsqoo�nlkiggffgiknostw{|�~|{y�wvtsokfb_\WROLJIGE�DB�A�?A�DEIL�M�LJ�I JLMOOQRRTV�W�Y^abfiknostvy|~������������������
���������������������������� ������������������������������������������������������������� ���~|{{ywtsqoo�n�l�k ikknnqqvvy|~��~|{�ywvsokgda\WTROMMLIIGGEDEDBAB�E
GJMOOQQOMLL�JL�MOQRTVWWVV�WYZ^adgkloqstvy{|~����������������������������������������������� �������������������������������������������������������
���~||{yvsq�o�n�o�qstwy{|~����~�|{wvsokgda^ZYVTRQOMLJ�IGEDD�GIJMOQ�RQMLJLLMOMLLMORTTVVTTW�YZ^afiklostvvwy{|������������������+���������������������������������������������������������������������������������������� ���~||{ywtsqq�o�q�s�t*vy{||~���������~|ywtqnkgfb_^ZYVTRQOMLMLJGEEIJLLMOQRTTROLLM�OMLJLMQ�RTVYZZ\^afiklost�vwy|��������
�������������
�������������������� ������������������������������������������������������������������������~||{ywvts�qs�qst�v
wy{|~���������~~|yvsqnlkgda^\YWVVTRQQOMJII�LMOOQQRVTROMMOQOOML�JMOO�QRTYZ\^_bfgkloqsttvwy|��������� ������������ ��������������������������������������� ���������������������������������������������
������������� ��~~|{ywvt�st�stvwyy�w vwy{|������������~|yvtsonlifba^\ZZYWVTQOMLL�OQ�RTVTR�Q�ODMLJIIJLMOOQRTWZ\^_bdfilnoqstvwy|������������������������������������������������������������~������������������������������������������������������������ ����~|{ywv�tvwy{{y�wy{|~�������������|{ywtqolkgfdbaa_^ZWTRQOO�R�T�VT�RFQOMLLJIJJLOOQQRVYZ\_bbdgklnostvwy|�����������������������������������������!��������������������|�������������������������
����������������������������������� �����~|{yw�v�wy{|ywwy{|~����������������~||yvsonlkigffdb^\YWTRR�VW�V�WVTT�RQO�ML�JLO�QRTWYZ^aabfiklosvwy{~���������������������������������������������������������~|~��������~ ~������������������� �������������������������������������~|{y�wy{|{yy{|~�������������� ������~{wtsqol�kifba^\YWVYZZYYW�YWVVRQQ�OMLJJLO�Q�R#VWY^__adgiknqvw{~��������������������������������������� �������������� ����~|{|~�������|�| ~������������� �������������������������������������������~|{�y�{�y�w y{||{{|~���������������������|ywvtqoonligfb_^^Z�^\Z�Y�WVRQ�O�QOMMLLMO�Q�RTVY\^^_bfgknqtw{��������������������������������������� ������������������~|�{|�����~|�{
|~����������������������������������� �������~~|{{�|�~|{ywy{|~~||~��������������������~|ywvtsqonlkgdbb_�a_^\ZWW�VTRQOOQQ�OMLLM�O�Q�TWY\\^adgknqtw{������������������������������������� ������������������~{�y{~����~~||{�y
{|�������������������� ��������������������� ��������~~�|~��~||{||�~�������������������������~|{ywvtssqnigfbdbba_^ZWV�T�VTR�Q�OMLLM�OQTTVWZ\^_bgloqtw{~�����������������������������������������������������|ywwyy{|�����~|{y�y{~����������������������������������������������������~�����������������������������������~|�{ywvsnkifgdbaa^ZWV�TVTRQQ�OMLLM�O*QRRTVYZ^_bgloqtwy|�������������������������������������������������������~{wvvwy{|~��~||~{ywwyy|������������������� �������������� �������������������������������������� �������������~|{wsoli
kgdba^ZYWVV�T�VTRQ�O�M�OQRRTVWZ^_bgloqtwy{~�������������������������������� ������������������|y�vwy{|�~�|ywwwy{~����������� ���������������������������������������������������������������������� ���������������~{vsolnkfda^\YW�VWVTR�QO�M�OQRTTVWWZ^adglosvwy{|���������������������������������������~||��������~{wvtvvy{|�~�|{ywwwy|~����������������������������������������������������������������������������������������� ����������������|yvsqqnifb_^Z�W�Y�WV�TRQ�O�QRTVW�Y\_dgilotwy{||~�������������������������������������~|{{|~�����|{wvtstvw{|�~|{�yy{~~�������������������������������������������������������������������������������������� ���������������~{wvt tqkgfb_\YYZ\ZZ�WVWWTRQ�OQRTTVYZZ\^afiknqtwy{�|~�����������������������������������|{�y{|���~ywtsqqsvvy|��~{�wy{{|~~�������������������
������������������������������������������������������������������������������������|ywv vsnkifb_\\^^\Z�Y�ZWTR�QRTVVWY\^_abfilostwy{�|�{|�������������������������������|y�wy{|~~{wtqonoqtvy|���|yvvwy{�|~�������������������������� ���������������������������������������������������������������������������~{ywwtqlkgfb�_^\�Z�\ZWV�T�V�WYZ^_abbgknoqsvw�y {yy{~|~�������������������������~|yw�vwy{{wtqo�nosty|~�~|ywvwy{�|~���������������������������
���������������
����������������������������������������������������������������~{{ywvsoligdbaa__^^�\�^\ZY�W�Y Z\_aabdilnnost�v�wy{{|~����������������������~ |{yvttvwwvtqo�noqty{�|{ywwyy�{|~������������������������������������������ ������������������������������������������������������������~||{
yvtqolifdba�_^\\�_^\ZYZZ�\Z\^�abfkllnos�tstvv�wy{{|~����������������� �����������~|{|~~{yvtsttssqonl�noqtw{{�|{yywwy�{|~������������������������������������������������������������������������� ����������������������������������~|{
{wvtsokgfdb�a_^^�_^\Z\^�_�^
_aabdgkllnq�s�qs�tv�wy|��������������������~|{�y {|~{wvtssq�onll�nostvy{||{�y�wy�{|~��������������������������������������������������������������������������������������� ���������������~||ywwvsligffdbbdb�a�_�^_abba__�abdiklno�q�onooqqst�vy|~����������������~|{yw�v�wy|yvtsqon�l klloosstwy{{y�wy�{�|~��������������������������������������������� ���������������������������������������������������������������~ ~{yywtolkiig�f�dba�_abdd�bdfiln�o�n�l�n�o
qstvwy|~���������� �~{ywvvtss�t vwvsqqonll�k lkkloqsstv�wy{�| ~�������������������������������������������� ������������������������������������������ �������������������|{{ywsonllkiggffdbaa�_a_bd�f dbbdfginoqonl�k�l�noqsvy{|~������������|{wvts�qs�qsqo�n�l�klnq�st�vw�y|�~ |~���������������������������������������������������������������������������������������������� �������������~||{yvso�nligffddbb�abdf�gfddfgiknqqnlkigi�kl�n
osvy{|~��~~��~�|~�� �|ywvsqonn�o�n�l�nl�k�lnq�st�vw�{|�~������������������������������������������������������� ������������������������� �������������~|{{ywtq�onkig�f�d�bfg�i gfggiklnooli�gikk�n
oqtw{|~�~||�~|{�y{�~ |ywvsonlkk�l�kl�kl�nlkklnno�s�t�vy�|�~|~�����������������������������������������������������������������������������������������������~|{{ywtsqqonlki�gf�dfg�i�k�lkgffggikl�n�oqsvy{|~~||~~|{ywwvvwy�{ywvtqnlk�i�k�ik�ik�l�klnoqss�t�vw{�|�|
~���������������������������������������������� ��������������������������������������������� �����������~�| {yvtssqonlkgg�ikig�fgiikk�l�ki�fgik�l�o�qtwy{~~||~|{wvttsstv�wvsqnki�g�f�gfggiggikl�klnoqqst�vtvwy|~~||�|����������������������������������������������������� ��������������������������������������������������������~
|ywvttsqnlk�i�kig�fgikl�n�lkig�fgi�k�lnoqqsvy{||{||{yvts�qs�tsonlig�f�d�fg�k�iknoqqst�vwy{|~~||�|~���
��������������������� ������������������������������������������������������������������ ��������������~{ywvttsqnl�k�i
kiigfddfikl�n
lkiikgfddff�i�k�nlnnoqvy�{�ywtsq�o�qonlkigf�dbabbdfd�bfgikkiiginoqqst�vwy{|~~|~~����� ���������������������������������������
��������������������������������������������� ��������������~{ywvttsqon�lkigg�igfddfik�l
kiggigfddfg�iklnn�lnotw�yw�vtsq�o�n�onlkkigff�dba_abddb�abdgii�giloqss�tvwy{|�~������������������������������� �������������������������������������
������������������������
����������� ����~|{ywvtsqo�nkiggf�gfdffgi�ki�g�f�dfggikk�l�k�lnqv�w tssqonnoon�lki�g fgfddba__aba�_ab�fdffglnoss�tvwy{~������� ��������������������������������������������������������������������
���������������������������������������~|{ywvtsqoonkigg�f�g�f gikkigffgg�f�gi�k�lnost�vtqon�l�nl�kigff�gfdba�_�^�_a�bdfgklnqs�tvwy|����������������������������������������������������������������������������� ����������������������������������~{ywwvsqoonlkii�gf�dgikkig�f�g�ikllnnoqsttsonnllklkk�igffd�f gffdba__^^\^�\^_�abfgiklnoq�tvw{~���������������������������������������������������������������������������������������������������������|{yywtsqoonnll�k igfdbdgikkigg�fgffg�i�g�ikl�no�qonnllkk�igff�d�fdba__^^\\�Z\^__abdfg�i knstvvw|��������������� ����������������������������������������������������������������������� ���������������� ��~|{{wvtsqo�n�lkigf�dfg�ig�figgi�ki�gikln�l�nlk�i�gigf�d�fdba__^\Z�YZ\^^_abd�f
ilqsvwy~������������������������������������������������������������������������������ ������������������������������������� ����~|ywvvsq�onlkkig�fg�igffgi�k�lki�gikll�kl�nlk�i�g�ig�d�fdba_^^\ZYWWYYZZ\\^_ab�d
filosvy|����������������������������������������������������������������������������������������������������������� �����~{ywwts�q�nlkii�g�i�g�fgikk�lkif�gikll�k�iklnnlliig�f giigdfddbdfba^�\ZY�W�Y�Z�\^_aabbdfknqtvy|�������������������������������������������������������������������������������������������������������������������������~|{ywvttsqoonlkk�ig�fgikk�lkgfg�ik�lkigg�ik�lkig�f�g�fdbabda^Z�Y�W�YZ\�^_aabdgilosvwy|��������������������������������������������������������������������������������������������������������� �������~|{ywwt�qonll�k�ig�fgik�l kgffgiikllnlkg�fgik�l�kgffd�f gffda_ab^ZWVT�V�W�Y\^�_abdfilnstvwy|���������������������������������������������������������������������������
�����������������������������
�������~|yv�sqonn�lkii�gik�l�kigffgikl�nlkgf�dfgi�kigf�d�f�dba�_\YVRQRTV�WY\_�abdfiloqtvvwy|��������������������������������������������������������������������������������������������������������������{v�ts�qonnllk�i�giklkki�g�ilnonnlkgfdbbdfgi�kigfdbbfdb�a&_^^ZWTQOQRTVWWVY\^_aabbfilnqsvwwyy|~��������������������������������������������������������������������������������������
����������������������������������|wvvwv�tsqonll�k�i�kig�f gikklnonllkifd�bdfgikkigffdbbdba�_ ^\ZYVRQOOQRT�VWZ\^_abdgknostvw�y{|~��������
����������������������������� ��������������� ����������������������� �����������������������������������{�yw�vtsqonn�l�kigf�dfikkl�n�lkifb�abdfgiigfddbaaba_�^\YWVTRQOMOQQTTVWZZ\^_bfiloqsttv�wy{|����� �������������������������������������������������������������������������������������������������������������������������|
{ywvttsqoon�l�nl�kigf�dfgik�lkigda�_abbdfgf�db�a_^\ZYVT�RQOMMOOQRTVYZ\^_bgkloq�s tvwwy{|~���� ������������������������������������������������������ �������������������������������������������������������������������~||{wttsqoonlnn�onlkigf�dfgkkl�kigfba_^^�_adf�d�a�_
^\ZYWTQOOMM�L�MOQRTWY\^_bgiloqststvwy{||~��~ ~�������������������������������������������������������������������������������� ������������������������������������������������~|yvtsqonlln�onligf�dfgi�kigfdba_�^_b�d ba_^\ZYWTQMLJ�I�J�LMOQRVWZ\_bfgknqsttvwy{|~~���~ ~�����������������������������������������������������������������������������
�������������������������������������������|{wvsqonllnn�onlkif�dfg�i�kigf�ba_^^�\^aa�b
a^ZYYVTOLJG�E!GIJJLLMORVYZ^abfiloqstvwy{|~~�~~|~ ~���������������������������������������������������� �������������������������� ��������������������������������������
����~|{wtqo�no�q onlkgfdbdf�gikkigd�a _^\\ZZ\^__�a
_\YWVROLIGD�BDEI�JLMORWYZ^adgknoqstwy{{|�~�|~����������������������������������� ����������������������������������������� �����������������������������������������~|yvsqoonnoq�sqnnkgfdbbdfggikigfda__^\Z�Y�\�^_�^*\YWVTOLIEDBA??BDGIJIJJLLORVW\_bfilnostwwyy{�~�|�������������������������������������������� �������������������������������������������������������������������������������������~{wvtsqooqs�tsonkgdbaabdfgiiggfda^\ZZWVWYZZ�\ZYYZZYWVTQLIGDBA?==ADEGII�J LORVZ_bfiklost�vwy|�~������������������� ��������������������������������������������������������������������������������� ����������������������|ywvtsqqst�vtqnifba�_abf�gfda\YWWTTVYYWYYWVTT�VTQMJGDBA?�=?ADEGGIGIIJMQTY^bfiknoqs�tvw{|�~��������������������������������������������������������������������������������������� �����������������������
��������������� �����|{ywtsstv�wvsnifb_�^_ad�f db_ZWVTRRTWW�VTR�Q RTTQMJIEBAA?�=?B�E GIJLORW\adgkn�oqsstvw{|�~������������������������������������������������������������������������������������������������������� �������������� ������|{yw�v
wyywvsnifb_�^_a�ba_\WVT�R�V�TRQ�OQRQMJIGDA??=<<=<=A�D EGILORWZ^afil�noqstvw{�|�~����������������������������������������������������������������������������������� �������������������������������������
�������~|{{�ywvsokfba_�^�_^\YVT�R�TRQ�OMLIGEBA??<::<<=?B�D EGILORWZ\_dgik�l noqstvwyy{�{ |~��~~�����~�����������������������
�����������������
����������������������������������������������������
����������������������������~�|
{ywvvsolfba�_�^�\�ZYVTT�QRQRQ�R�Q OMLLJIIGEB?==<�:"<=?ABBDDEGJMQTWZ\_bffgikklnoqstvvtv�vwy{�|�~�|~������������������������������������������� �������������������������������������������������
������������������������������� �~|yvttsolgda�_^\ZY�WVTRRQOOQ�O�QOLJII�GEB?==<�:<=?AABDEGILORVYZ\_b�d fgikklnqss�q�stvwyy�{ ~��������������������������������������������� ������������������������������������������������������������������������������~|yvssqolifb�_^\YWVVTR�QOML�M�OM�OMJIGE�DB??=<:88<==??BDGJJMQTWYZ\^a�bdfggilno�noqst�v�y�w
y{{|��������������������������������������� ������������������������������������������������������������ ��������������������~{yvsqonkifb_�^\ZWVTTRO�ML�JLMM�LJIGEDB�A�?=<:88:<<=?BEILMORTWZ\^^_�a�b�dfi�k�lnoqs�t�v�tvy{{|~��������������������������������������������������������������������������������������+��������������������|ywtqonligfb_^\\ZWTRRQOL�J�I�G IJLJJIIGEDDBA?�=�<:88::=?DEILOQRVY\^�_a__�abdff�giklo�q�sty{{|~~��������������������������������������������������������������������������������������������������������!���������|yvsonligfda_^\ZWTRQQOMJI�GEDDEG�IGEDB�A?=<�:�<:�8 :=ADEILOQRVY\^�_�a�_a�bdffgikn�o�noqstwy{|�~�����������������������������������������������������������������������������������������������"����������|wtqolkgfdba_^\WTRQOOMLIG�ED�BD�EBA?�=<:�8�:�878:<ADDGLOQRVYZ\�^\^^a_^^_�abddffgk�n�l
noqsvwyy{{|�~���������������������������������������������������������������������������� ��������������������������������|wtqolifdbaa_^ZVRQOMMLJIGEE�DB�A�BA?=<::8�7�8�78:<?BDGJMQRVWYY�Z\^__�^�_ab�dfgkll�k�l�noqstvvwy|~~������������� ��������������������������������������������������������� ��������������;������������������������������������~yvqolifdbaa^\YTQOMLLJII�GD�BA?�=�?=<:7755�78�7�58:<?BEGILORTVWVWYYZ\\�^_ab�d�dgii�giknnoqoqstvy|~~���������������������������������������������������������������������������������������������!�����������~{vqnkifdba_\ZWTQMLJJII�GEBA?==<<�:�<:85445�75�4 58:=?BEGIJMQR�TVWYZ\\�^�_abdd�bd�fgilnoonnosvy{|~���������������������������������������������������������������� ����������������������������������������������~ytqligddb_^ZYVROLJ�IG�EDBA=<<:875578754�24554200�2 47:=?ADEGJLO�Q�RTVYZ\�^_abb�a�b�dfgklnllnoqtvy{~�������������������������������� ���������������������������������������������������������������� ��������������|wsolgdbba^ZYWTQMJI�GED�B A?<:875422442�0�20//00247:=??ADGJLM�O�QRTWYZ\^�_�^_aa�_abddfgi�k
lnqqstwy|�������������������������� ����������������������������������������� ��������������������������������������~{wsnkfbaa_\YVTROLIG�EDB?�A ?=:8520/--�/-/00�/�0�/�0 2478<=?ADGJL�M�OQTVWYZ^_�a�_�^
^\\^_abbdfg�i lnqqstvw{��������� �������������������������������������������������������������������������������������������� ��������~{wsnkfba_^ZWTQOLJGEDDBA?�=<:852/-,�*�,-�/�0 24578<=?ADGJL�MOQTVVWY\_abba_^\�Z\ZZ\^_aabdffgilnoqstvw{����������������������������������������������������������
�����������������������������������������~{vsnkfa_\ZYVROLIGD�B?=<�:8750/,,*�(*,,-//0�2 4578:=?AADEIJ�MLMORTTVWZ^_bb_^\ZWWYZYWYZ\^_aabbfgklnoqsvwy����������������������������������������������� ����������������������������������(�����������������������{vsolfa^ZYWVROJGDB�A=:88�7540-,**(�'�(/*,/0244554458:<=?ABBDEGJMOOMLMOQRTVWZ\^aa^ZYWVVWYWVWYYZ^�_ adfgilnosvwy~���������� ������������������ ������������������������������������������������������������������7�����������������������|wtqnga^ZWVVROIEAA??=:8754220/-**�('�%�'(*/025578�7:<=?BBDDEEGJLOO�M�OQTVWZ\\^_\YWVTVVVTT�WZ\^^_bddfilostwy|~������ ���������������������������������������������������������������������������������������� ����������������������������~yvsoib^ZWVTQMID�? =<87540/--,*((�'%�$
%''(*-/2578�:<=?B�E�GIJLMM�OQTWYZ�\ZWV�TR�RT�VWZ\^_aabdgkostw{||~��������������������������������������������������������� ��������������������������������������������������%����������{wtqld_ZWTQMLGB?==<:7742/-,*�('%�$�"�$�%(*,/258:�<=?BE�G�IGIJLLMO�QTWY�ZYVVTRQO�Q�RTRTVYZ\�^ _bfinqtw{{||~���~ ��������������
���������������������������������������������������������� ���������������������� ������������������'������|yvsnga\WTOLIEB?=<:87542/,*(''(('$�"�$ %(*,/258:<�=?ADG�I�J�IJLLMOQ�RTWY�ZYWVVTQMM�O�QRTWZ�\ ^adgkotwy{�|�~�|~�������������������������������!������������������������������������ ������������������������ ����������������"��������~{vsoib\WRMJGDA?<:754220/*(�'�(%$�"�$%(**/257:<=??ABEI�JIJLLMORTTRTVWYY�ZWVVTROLJ�LMOQRVYZ�\ ^_adinsvwy�{�|~��������������������������� ����������������%�����������������������������������������������������������������������(������{vsokd^WRMJEBA?<854200/-*(''(('%%$$�"�$�%'(*-2458<=?ABDEI�L�J�LMOR�TVW�Y�ZYVTTRQMJI�I�JLMQRVYZ�\�^
_bglqtwyy{{�y{|~~������������������������������������� ������������������������������ ���������������������������������������� ��������{wsokd_YTMJEBA?:74200/-,(�'�(�%$""$$�%'(-0457:=?ABDGILLM�J�L MOQRTVWYZZ�YVTRQOMLJIIGGIJLOQTYYZZ\^__bgkosvw�y�{�~������������������������������������� ������������������������������������� �������������������������2��������������������~{wsnid_ZVOJGDB?:74200/-*(''(('�%�'%�$%(,/2458<=?ADGIJLML�JLMOOQRVWWYZZYWVRQOMLL�JIGEGIJMQTWYYZ\_abdgknsvw�y�{|~���������������������������������������������*�����������������¾�������������������������������3��������������������������|{vqlid_\WOJGDA?:75420-,**�(%$%%'('�%$""$%'*-0247:<=?BEIILML�JLMOORT�WYZZYVROML�J�IIGEGIJMORTWWZ^abdfgklqtwy�{|~����������~~����������������������������������������������������������������������������������)�������������������|ytolid_\WQLGDA?<87540-�,�*(%$%'(*(�'$""$%'(,-/258:<=ADGIJ�L�JLMOQTW�YWTQMLJ�I�G�GIJMORTWY\_bfgiiklotwy�{�|�~��� �~|{{|����������������������������������������������������������������������������������)������������������|wsokgb_\YTOJEB?<:7542/-�,('%'(*,*�'$""$$%'(*-/257:=ABEGIJJ�LMOQRTY�ZYWVTQMLJI�G�E�E�GILORVWZ\^afgikklnqtvw�y�{�|~��~�|{�y
{|~~||~��������������������������������������������������
¾�������������������������+��������������|wsokgb_\YVRMIDA=<87540/-,,-,*�(*,,*�'%�$�%(,-/25:=ABEGIIJL�MOQTTVYZ\ZYVRQMLJJGEEGGEE�EGIJMQVY\^_adgiklnoqst�v�w�y{|�~{yy{{y�w�y{|�����������������������������������������������������
��������������������������������&��������������{wsokgb_\YVTOLGB??:87520/�-,**�,*(''�%�$''*,-048<?ADEGIJLOOQRRVVWYZZYWTQOMLJJGEEG�E�EIJLORWZ^_bdfikkloqtt�v�t�vwy�| wvvwwvvwvv�t�vwy|��������������������������������������������������� ¾�������������������������'�����������~{wtokgb_\YVTQMIDBA=<:85420/-�,�-,*(('%%�'%$$%(*,/47:=ADEGIJMOQRTTVW�YWVRO�MLJI�G�EEGJLOQTW\_adfgiklnos�vt�s�tvw�yv�tvwvtsqqsstw{�������������������������������������������������������������������7�������������������������{wtqlgb_\YWTQMIEDBA?<:754200/-,�-*(('%%�'�%$%'(*,/458<?DEGIJMQRTTV�W�VTQOMLLJII�G�EGGIJLQRVY^abdfgiknoqt�vtsqq�s�t�vwt�stvsq�oqstvy|���������~|~�������������������������������������������������������������� ����������������|yvsnida^ZWTQMIED�B?<875�42/�-,*(�'�%'(*,-0458<?DGIJLMQ�TVWWV�TRQOMLJ�I�GI�JLMQTWZ^abbdfiloqs�ts�q�s tvvttvvtssts�q�s qonnoqstvw{~�������~|{|~��������������������������������������
�¾������������������&�����������������������~{wsnkdb_ZWROLIE�DB?<:8�740/�-�,*�(�'�*-/2458<AEIJJLMORTT�VT�RQOMLJI�J�IJ�LMOQVY\^_aadfins�t�s�qstt�v�ts�q�o�qo�noqtvvwy{|~~���~{�|�{|~��������������������������������������¾���������������� �����������������������|wsnkfb_ZVQMLIGEE�DBA=<::8520/--,,�*�,*�( *,/24578=BGJ�LMORT�VTR�Q�R�QOM�L�J�L�MOQRVY\^^_adgkotvvtsq�oqst�vt�sqonn�o�qo�noqtv�wy{|~~|{yy�{|~������������������������������������¾���������������������������������������|wsnkgb_YTQMLIIGG�E�DA?==<840/�-�,�-,�*,/4457:?BGLMMLMQT�WTRQOO�Q�O�M�OQ�RTVYZ\\^_bglqvwvtsoonnoss�t�vtssqonllnoonooqoonnoqsvww�v�y�vw�y{|~�����������������������������������¾���������������������������������������|wsnkgb^YTQMLJI�G�E DBA?=:520//00/�-�/-�,
-04578<?BGL�MORW�YVRQOO�Q�RT�VWYZ\^_bgnsvwvtsqqono�qstvvtsqon�l�n�ln�q�oqstvv�t�v�t�stvwwy{~����������������������������������������������������������������� ����������������|wsnkgb^YTQMLJIGG�E�GEDDB?:742�0/�20/�-/25778<?BGLMMOQT�YWTRQOOQRR�V�T�VV�W!VWWYZ^_dinsvwwvvttqooqqoqstvvtqnnl�k�l�k loqqoqqsttvtts�q�o�q�stvwy|~�����������������������������������¾�������������������������������������������~ytolgb^YVROLJIGG�E�G�EDA<8754�2455420/025788:<?DGJLMORV�W�Y WVTRQOQTVW�YWVVWW�W�Y�W YZ^afknqtv�wvts�qstvvtso�lkii�kln�o�qs�t�sqo�n�lno�qstwy{|�������������������������� �������������������������������������������������������{volgd_ZVROMLLJI�G�E DB=::7545542�457754224588::<=?DGJLMOR�TVWW�VTRQRVWWY�Z�Y�W�YZ�Y
Z\adgklostv�wvtt�s�tsqn�k�iklnn�o�qsqqnn�lkl�noqsvwy|������������������������� �������������������������������������������������������|wqlifa\WTQ�OML�JIGE�D BA=<:87887�457887�578:�<=?ADGJLMO�QRT�V�TV�WY�Z�Y�Z�\ ^_adgiklostt�v�t�v�tsqnk�i�g�i�kl�n�on�l�n�lnoqtvy|�����������������������������������������������������������������������������~ysnkgb^YVR�QOM�LIGE�DB?==::<:8�578�:�8 :<==?AABDGIJLM�OQR�VW�Y�Z�YZ\\�\^_abdfgikklostt�vtvvw�y�vtsqnlkk�i�g�i�k�l�k%lnnlnnllnoqtvy|������������������������������
����������������������������������������������������~ytqlgb_ZWTRQQO�MLJG�EDBA??�=
<:8778:<<==�<�=?AB�DEGIJLMM�ORV�WY�Z�YZ^_�_adgi�k�lnostvww�vwy�{ ywtsqonllk�i�g�i�kigg�ilnnll�noqtvy|������������������������������������������������������������������#���������������~yvsngb_\YVRQQOMOOMLI�GEDBB�A�?=�:<==AA�?ABBDD�EGILM�ORVWW�YZ\\�YZ^a�abfik�lnooqstvw�ywy{�| {ywtsqonllkk�i�g�igff�gk�l"kllnnqstw{~���������������������������������� ���������������� ���������������������������������|yvsnid_\ZVRQQ�OMLJIGE�D�BA?�=?A�BD�E�GIJMOQQ�OQRVWWY�Z�\ZYYZ�YZ\^a�bdgiklnoq�stwy{||{{|~~|{ywvsqon�l�ki�g�fgi�k�lnostvy~������������������������������������������������������������������������"���������~{wtsnkfa^ZVRQOOQQOOMLJIGG�E�D�B�AB�D�E�G�E�G�IJMOQQ�OQRVWWY�Z�\�Z\ZYYZ\^abdd�fiklnos�tvyy|~�~|�~|{ywvtsqq�on�lki�g�fg�f�d�fgiiklnoqstw{~���������������������������������� ���������������������������������������� ���������|yvsqnkgb^YVTQOOQQOOMLJI�G�E�DE�G�E�G�I�JLMO�QRVWWYZ\\�^\ZZ\^_adfg�iklnost�vwy{~����� ~|{{ywvvtt�sq�onki�gf�d�fd�b�dfgiknoqstvy|�����������������������������������������������������������������������������~{wtqnlifb^YWVR�Q�OMLJIGGEE�G�EGEGIIJ�I�GI�JLMLMMOOQ�RQRVYZ\�^�_�^�\^_abfgikklnoqsttvvwvvwy|�����~�|{y�wv�t sqqoligfgd�b�dba�b dfiknoqsvw{��� �����������������������������������������������������������������������~|yvsoligda^ZYWTR�Q
OMLJJIGEDDE�G�I�GIGGIJ�LJ�IJLMM�OQ�RTWZ^_a__a�ba�_abdfgikklnqt�v�tv�wy|��������~|�{yww�v
tsqoligffdb�ab�a�b dfiklnoswy|��� ����������������������������������������������������������� �����������~|yvsnkgdba_\ZYVRQOMMJ�IGE�DE�G�I�JL�M�L�J�LM�O�QOQQ�R TW\abdbbdd�fbaabbddfgiklklotwywvttvw�y {|~��������~�|~�| {wwvtqoligfdba�_a_aa�b�dgiklosw{~�����������������������������������
�����������������������������������������~|{wsnkfbaa_\ZYVROMLLI�GE�D�E�GIJJIIJ�LMOO�M�LM�OQ�R�Q�RTVY^b�fgiigdbbd�fg ikllnqvyyw�vwy{�|~����������~����~{wvtsqnkgfdba�_�a�bdgklosw{~��������������������������������������������������� ��������������������������~|yvslifba__\ZWTQOMLLI�GE�B�D�GI�JLMOO�QOMM�L�M�OQ�T�QRTVWZ_d�g ikkifddffgfggiklnqtwyywvvwy{|~��~������������������|ywtsqnlifda_�^_aa�_!abbfinqtvy|��������������������������������������������������������������������������������~|{wtqlifba_^\YVRQOMMLI�G EBAABBDDEG�IJLMORTTRRQMLJJL�MOQR�T�RTVWZ^adgiiggiklkig�f�g�iklnqtv�w�vwy|~������������������~{wvtsonkgda_�^�_�^_abfinqtvw{~������������������������������������������������������������������������%����~|{wvsolifdb_\ZWVRQMLLJIGIIGEBAABB�DEIGIJMORTWWTTQMLJJL�MOQR�TR�TWY\_bfgikiiklnlki�g�i�lnoqtvww�vwy|~������~~������������|{wwvtqnlida_^^�\^_dilotvw{|�����������������������������������������������������������������������������~{yvtsolifdb_\YWVTQMLJJ�IGDBAAB�DEGGIJMQTVWWVTQOMLLM�OQR�T�VWZ\_bfgi�klnnlk�iklnoqstv�w�vwy|~������~~������� �������~{y�w tqnlifb_^^�\�Z ^bgknsvy{|��������������������������������������������������������������������&����������~ywtssolifba^\YWVRQMMLLJIIGEB�A�DEDEEGJJLORVWVTR�O�LOQOOQT�V
WVVW\\adfgi�kloonlkk�l�noqstw�y�w�vwy|~�����~||~�������������~yy�w tqnlifb_^^\\ZZ�Y\adinqty{{~���������������������������������������������������������������������~yvtssqnkfb_^\ZYVRQ�OMLIGEDB�ABD�EG�JMQTVTRQ�O�MO�QRV�WY\^adfggi�kl�o�n�oqstwy�{y�wy|�~�|�~������������|yw�vtqnkgfb_^^\\ZZYY�WY\_bgnqtwy{|���������������������������������������������������������������������������~yvtsqqnkgd__^\YWTRQQOMLIGD�BABD�E GIJJILORTRRQ�OQRRTW�Y�W�YZ\_adfgfgiiklnnooqq�sqqsvwy�|�ywy�{�|�{�|~����������~|{w�vtsolkgfb_^\^^\ZWV�TVWZ^afnqtwyy{~��������������������������������������������������������������������~{wtsqqolifba_^ZYWVTROMLJGD�B�DEG�ILOQ�RQ�OQRTVWY�Z�YZ\\^_ad�f
giklnnoqstt�vtsstwwy|�~|{�y�{�y{�|~��������~{ywv�tsqnkifda_^\^^\YVT�R"TVY\aflqtvwy{|��������������������������������������������������������������������~|{wtsqqonkgfdb_\ZZYVTQOLJGD�A�B�DEGEGILMOQ�R�Q�O�MQRTWWY�Z\�^_abd�fgil�noq�t�vts stywy|~~��~|{�y{�|~����������|ywt�s1qooligdb_^^\^\ZWTRQQRTVY\afkoqtvyy{~������������������������������������������
����������������������~||{yvtssqolkigfb_^\ZWTRQMJGDA�?A�B�DEIJLOQ�R�QOMLMQRTWY�Z�\^_aa__aabdffgilnooqs�ttv�y{|~��~||�{�y{�|����������~|yvsqoonllkgdba^�\0ZYVTRQQRVWY\afilnqtwy{~���������������������������������������������������������������������!~|{{||{wvttssonlkgfba^\YTRQMJGDA??�AB�DGIJMO�QMLJLQRTWYZ\\^_bbdd�abddfilnoostvttssttvvw�y�{~���~{�|�{�|���������~|{wsqollk�i fa_^\ZYYZYWTT�R(VWY\afgiknsvy{|��������������������������������������������������������������� ~{yy{||{yw�vtsqoligfb_\YVRQMJGEBAABBA�?AB�DEGJLM�O MLLMQRVYZ\^_ad�fdb�a�bdgklnosvwvtsstvw�y�{|�~�|�~|�{�|~���� ���~|ytqonki�g fb_^\ZYWWYYW�TVWY\adfgilqtwy{|���������� ������������������������������������������������� ��������~|{yy�{�y�wtsqolkigb_\ZWROLJGGDBBDDBAA??AA�BDGJLL�M�O
QTVWYZ^_abf�gfba�_adilloswyvtsstwy�{y{{yy{|�~|{�|{yy|~~�������~|yvsoliggffdb_^\ZYY�WVTTV�TVWY\_bdfgkostvwy{~���������������������������������������������������������~|{�y�w�ywtsqnlkifb_\ZWRMLJIIG�EDBB�ABDGIJJL�MOQRTVWYZZ\_bddg�igfba__�^_bgkloswywvttvy{�{�y{|�~|�{ywy|~~��
����~{wtqni�fdba^\ZZYY�WVTTV�TVWZ\_bdfgiloqstvw{~������� ����������������� �������������������������������������||{yw�v�ywvsqlligda_\ZWQML�J�I�EDB�A�BDEGIJLLMORVWYYZ\\_adfg�kiggdba_^\\^afikosw{ywvvwy{�{�y�{�|�~|{{�ywy{~~��~
����~{vsnkf�d ba_\ZYYWYW�V�TVTTVWYZ\_bdfggklnoqstw{~������ �����������������������������������������������������~|{yv�tv�wvsolkgfba_\YVQM�L�MLIGEDB�A�BDEIJJLMQTWYZ\\^_bdfik�lkigfdba^\\^adgknsw{{�y{|�|{�y�{�|{�y{|�~ ����{vqlgd�ba_^ZY�WVTTV�T�VWYZ\^abd�fgilnoqsvy|������� ���������������������������������������"��������~|{wvttstvvwvtqnkigfda_\YTQ�M�QOMJIEDB�A�B�DEGIJLMQTWZ\_abdfgi�ligfdba�^ _adgklqv{|�{|~�~{�y�{�y�|{�y�{�|�~����{tokfba�_�^\ZY�WV�TVT�VYZ\^_a�b�d fiklnosv{~������������������������������������������������������|{ywvvtst�vtqonkiggfba^YTQ�OQ�RQOLIGED�BD�EGIJLMQTW\_bfgiikl�nkgfdba�_abdgkloty�|~��~|�{�y�{�y{�|~�� ~ytokfb_^^�\ZYWV�T�V WYZ\^_aa__�a bfikklotw{~�����������������������������������������������������������|{ywvvts�tsonnkiggfba_YTQOQQRT�VTQMJIGE�DE�GEGIJLORVY^bfilnn�oligfdb�a bdfgklotw{|~���~�|{||{�y{�|�~�|~��~|wsokfb_^^\ZZ\\ZYWTRR�TVWYZ\^�_�^"_bggiknsvy{~��������������������������� �������������������������������������|{ywvv�tsqonnlkgfdba_ZVRQQRTV�WVROLJIG�EG�I�GIJMQTY\_diloqssqq�sqolkifdbbdffgiknqtwy|�������~�|{ywwy{|�~�|~��~|yvsokfba_^\ZZ\\ZYVRQR�TVYZZ\^__^�\ ^adfgilosvw{~���������������������� �����������������������:������������~~|{yywvvttsqonnlkgfdda_ZWTRQRTVWYWVRQOMJIGEEGG�J�IJMORVZ^_fknqsttssttvvssonkigffg�iklosvy{~�������~�|{�y{�|�~�|~��~|ywtqnigba_^\ZZ\\ZWTRQQRR�T VWZ\\__a_^�\�Z!\^adffilostw{~~����������������������� �������������������������������>�~||{ywvtsqqonkigffda^ZYVRQQRTVWVTRRQOLJIGGIIJLLJJMQRTWZ^afknqt�v�w�vtqnl�k�l noqty|~����������~||{{�y�{�|�~�|{wvtqligda__^\\^\ZWTRRQQR�VWY\^_�a_^�\�Z^abdfilosvy{|~���������������������� ��������������������������
�������������~{ywvtqqonkigffb_^ZYVR�Q�R VTTRRQOLLJII�J�MLORTVY\_bfknsvwwyy{�ywvsqo�n�oqstvy|����������~||�y{�|�{�|�~�~|{�y
wvsolifda__�^\ZYVT�R�VWZ\^__aa�_�^\�Z2\^_bdfikoswwy{|~��������������������������������������������������������������|{ywvsqonkigfda^\ZYV�R�QRTTRQOOMM�LM�OQTVYZ^adgknsvy{{|~|{{|{yvtss�qsvwy{~������
�����~|ywy|�~|�{�|~��~{y�wvsolifdba�_^\ZYV�T�VWY\^�_�^�_^�\�Z^abdfglqtvwyy{~���������������������������������������������������������������~|ywvsqolkigfda\ZYWV�R�QRTQQOQOO�M�LMOQQRVY\^_bfilosv{||~��~~��~{ywv�tsvwy{|����������
�����~~{y{|�~�{|{||~��~{�y
wvqolifdba_�a�^\YW�V�WYZ\�^�_^\^^�\�Y\^abdgkoqstwwy|������������������� ���������������������������������������|ywvtsolkigfda\YWWVTRR�Q�R�Q�R�QO�MOQRTWZ^_adgloqsw|~~������~|{yywvwy{|~���������������~�|�~�|~�|�~|�{yvqonkgdb�a�ba�_^\ZYWWYYZ�\�^\�Z#YWWYZ\_bdgknnosvwy{~��������������������������������������� �������������������~|yywvtolkkifd_\YVWVVTRQOO�Q�R�TR�OQRTVWZ^adfinqtty|~�����������~|{yy{|~��������������~~|{|~~���~|�~�| yvsonkgddbaabb�a_^\ZZY�Z�\�Z�\ZYYWW�Y�W!YZZ^adgillnqtvy{|������������������� ����������������������������������������������~|{{ywtqnllkgd_\Y�WVRQOO�QR�T�VTR�QRTWWYZ^afgknsvw{~��������� ���~||~������������������|{|~������~�|�~ |ywtqnkgffdb�a�ba_^^\\�ZYWVVW�Y�Z"^adgikklosvy{|������������������������������������������������������������������~|{ywtqonnlgda^�Z�YWTQOO�QTVV�WVT�RTVYYZ\_bgiknsvw|���������������������������� ���������~{|~������~�|
{wsqnkiggfd�aba__^^�\ZYYZZ�Y�Z�YW�VWY�Z^adgikklosvw{|���������������������������������������� �����������������������~|{wtssqnlifb_�^\ZYVR�QRVWW�YWVTT�VWZZ\^adgiknqtw|�������������������������|~������~�|�{
wsqolkiggfb�a_�^�\Z�Y�Z�YWVVWZ\\ZZ\_bfgikklosvw{|�~����������������������������������������������������������������~|yvttqnlkgfbaa_^\ZWT�Q�RTWYWYYWW�V�WYZ\\^_bfgiknqtw~���������������������������������~~�����~~�|{�ywtqonliggfbbaa__�^\Z\\ZYY�W�Y�\ZY�W�VWZ\^\\^abfgikklosvwy�| �������������������������������������������������������������~{wvvsonlkigfdba_\YVRQRTVW�Y�WYZ\�^_adfgiknsvy~��������������������������������������������~�|{�ywvsqonkigfddba__�^\�Z
YWVVWYZ\\ZY�WYZ\^__abdgikklnosvwy�{|~�������������������������������� ������������+���������������|ywwtsqonlkigfdb^ZYVTVVYWYYZZ�Y�Z\^_aabbdffgiknsv{~�����������
���������������������������������~�|�y wvsqqolkigffda�_�^\ZZ�YW�VYZ\\YY�W�Z\^aabdfikllnoqtvw�y{|���������������������������������
��������������������������~|{ywvtsqonlkigda^\Z�YZYYZ\\ZZ\\^^_abdf�g�i knqv{~���������� ���������������������������������~|{�y�{ yvtssqolkigfdb�a _^\ZZYWVTT�VW�Z�Y Z\^_bdfgil�noqsvw�ywvw{~�����������������������������������������������������������~|{ywvtqolkkgfba_^\\Z\ZZ�\�_�abdfgikkiggiklnqty|~���������� �������������������� ������������������~{�y{|{yvtstsqnlkgfdd�ba_^ZYWVTRRTTVVYYZ�Y Z\_adgikln�o�qtwy�{�y�w�v y{|��������������������������������������������������������~|{ywvsolkkgfddba_�^_�bdffgikllkiiklnoqtw{|�~��������� ����������������������������������~{�y{||{ywvttsqnlkgfdd�ba_^ZYWVT�RTVVWYZZ�Y�Z ^adfiklnoo�qtwy{||{y�w
y{~��������������������� ��������������������������������~|{ywtsolkli�fb�a�_ab�dgiikl�n�lnoqsvw{{�|~���������������������������������������~~�{�|�y
wttsqolkgfd�ba^\YYWVT�RTVVWYYZ�Y�Z\_bfgiklo�qtwy{||{yw�y wy{~��������������������� ��������������� ����������������� �����~|{yvsqn�lkgffbaa�b�a bdffgikklnoonn�oqsvwy{{�|~������� ������������������������������������~~�|{y{{yvtsqolkigdb�a_\ZYYWVTTRRTVWW�Y�Z�\
^adgiikloqq�o qsvy{||{yy�{ |~���������������������� ����������������������������� �����|{ywtqon�l kgffbabdff�b dfgikkllnn�o�q�sqstwy�{|{|~������������������������������������~������~��~||{{y{{yvtsonlkkgdba�_\ZYWVV�T�V�W�Y-\Z\^adfgigiknoonooqqtw{||{yy{|~|~������������������������� �������������������������������� ����|ywvtqon�l
kigfdbdfggf�dfik�l�noqss�tvy�{|~�������������������������������~�|~�������~|�{ ywvsonllkgfda�^\YW�V�W�YZ\\^ad�f�gikl�n�o�qsvy�{|~���������������������������������������������������������������|ywvvsqonl�kigfdfgiig�fgiklnnllnnoqstvvwvwy�{�y{|�������������������������������~|�{|�~��������~|{|{{yyvsonllkgfb_�\ZYY�WY�W�YZ\\_bd�f�gikl�n�o�qtwwyy{~���������������������������������������������������������3���������~{ywwvsqolkkllkiggikkiggiggikklnonlnooqsvww�y�{ ywy{|����������������������������~|�{|~�������~||{�y vsqonlkifb_\�Z�Y�Z\^abd�fgikln�o�qsvvwy|�������������������������������������������������������������������~||{ywtsqnlln�l�k�iklklno�n�q�svwy�{�y�{ ywy{|~����������������������������|{{y{y�w�y|~~������~~||ywwyvtsqonkifb_\�Z\�^\�Z�\^_bdd�fgikln�o�n�o$qttw{~���������������������������������������������������������������������~|yvtsq�o�n�on�l�n�lnlln�o qsttvw{||{�y {|~������������������������������~{�yw�vwy|~~��~�|{y�w�vtsolifda^�\^�_^\�Z\�^_abd�fgiklnoo�n�oqstw|����������������������������������������������������� ���������������~�~{yvtss�q�sq�oqon�o�n
oqqooqsttvw�{�y�w�y�{ ~���������������������������~{�w�vwy|~��~��~�{y�wvtqlifda_�\�^_aa�_^\�Z\_^^_abbdffggiiklnoo�n�qstvy|�~������������������������������������������������������������������~~��~|ywvv�t�v�t�s�q�oqss�qsttvw�y�w�v�wy{~����������������������������~{w�vwy{|~��~��~|{yy{{y�w�ywtqnkgfba^\\^^_aa_�^ \ZZ\^_^^_b�dfgi�k�lnoonnos�tvw{�|�~�������������������������������������������������� ������������������~{�ywvv�w�v�t�s�qstt�stvwv�w�v�wvttvvw{~���������������������� ��������~{yvv�tvwy{|~~��~|{yywyy�w�ywvsokgfdb_^\^^_aa_^�\Z\^�_ bdffgilnnl�noq�ostvwyy{{�|~�������������������������������������������������� �������������������~ |{yy{||{ywwvt�stvv�tvww�vwvvwwvttvvw{~������������������� ��������~|{wv�t�vw{�|�~|{y�w�v�w vsoligfda_�^�_^�\^_�abdggikn�oqssqqstvy�{�|~����������������������������������� �����������������������������������~�|~�~||{ywv�tvww�vt�vtvttww�t�vy{~����������������� ���������|{wwv�tvw�y{||ywvv�t�v
sonkiigdb__�^_^�\^_abaa�bdiiklo�q oqqsttsstvwy�{|{{|~���������������������������������������������������������������������������~|{y�w�yw�v�t�v�tvw{|~������������������������~{yywvttvwwvvwyywvtt�s�tson�l kifba_^^_^�\^_bddbb�dfiiklo�qst�vw�y{||�{|~������������������������ ������������ ����������������������������������������������~|{{�y{|{ywvwvv�ts�t vtvy{|~�����������������������~|ywv�tvtsst�vtss�qs�q�sqsqo�nlkgdba_^_�^_bdffdd�fgiikloq�svw�y{�y{�|{|~����������������������������������������������������������������������������������~~|{{|~~|{yyw�vtssttvvwy{|~���������������������~{ywvvtt�s�ts�q�o�q�o�nlifdba�_adfggffggiikklnqsttvy�{�|�{�y{|�~�|~�������������������������������������������������������������������������������������~�� ~||ywvvtss�tv�y{~�������������������������~|{yvv�t�s�q�o�n�o�n�l�nlkgdbaa�_abd�g�i�k�lnostvvw{�|�{y{{|~���~���������������������������� ��������������������������������������������������|ywv�tv�y{~�������
��������������������������~|yvtt�vts�q�o�n�onll�k�lkgdb�a�_abffgk�lnooqsv�wy{�|�{�|~������������������������������������������������������������������������������������������~|y�w�v�wy{~���������������������������������~|yvttv�wvts�q�o�n�l�nlk�ik�lkgdb�a�_�^_abdfgknooqstvw�y�{|{|�{~���������������������������������� ����������������������
����������������������������������������|�{y�w y{~�������������������������~|{yvttv�wvt�sqonn�l�n!liggikllkifdbaaba_^^_abdfiloqstvwy�{�y�{|�������������������������������������������������������������������������������������������������������~|{yww�y
{~����������������������������~|{yw�v�wvtt�s�q�o�nlkk�lkgffi�k igdbaabdba�_ abfgknqstvwy{~�|�{�y�{�y{~��������������������������������������������������������������������������������������������������������~|{yy�{
|������������������������� �����~~||{{yy�wvt�s�qolkkllkg�fg�igfbaab�dbaabdgknqstvvwy|�~|�{ywwy{~������������������������������������������������������������������������������������������������������~|{{~�| ���������������� ��������������
����~||{|{{�yw�v�t�sqnl�kif�dfgiigdbaabddffdbbdfilostvvwy{|�~|�{ywwy|~~���������������������������������������������� ���������������������� ��������������������������������� �������~~��~���������������������������~�{�|{�ywv�t�sqonlkkif�dfggfd�bdffddfgiklostvvwy{�|{�y�{�y{|�~��������������������������������������������������������������������������������������������������������~������� ����������������������~�|{ywwvv�t�st�s�tsqonlkigd�b�d�bdffddgikknqttvwwyy{�|y�w{�|�{ |~~������������������������������������������������������������ ����������������������������� �������������������������������������~�|{yw�vtsqqs�q sttsqonlkigd�b�a�b�dgkklosttv�w y{|{wvvwy|~~|�{|�������������������������������������� �����������������������������������������������������������������������������������������������~�| {ywvvtvvtq�o�qsttsqonlkigfdba_^^__a�ba�b�dgklnqs�t�vwy{yw�vw|~||�{|������������
�������������������������������������������������������������������������������������������������������������
���������~~�|{ywvv�tsqonnoqs�t sqonlkigfba_�^_a�b�abdfgknoqs�t�v�w�vw{�|�{�|~���������������������������������������������������������������������������������������������������������������������������������������������
�������~~|~�{ywvvttsqoonooqs�vtsqonkiifdba__^__�ab�abdgikoqqs�t�v wvwvtsttvw{|~~�|�~���~������������������������������������������������ �������������������������������������������� ������������������������������������������~~�|
{yy{{ywvvtq�o�qt�w vtsolkigffdba�_�a
bdfikloqsst�v�w�v
tsqstvw{~���~���~�|~������������������������������������������������������������������������������������������������������������������������� �������������������~�|{ywy�{ywvtq�oqsstvw�y wvtolkiigifdba�_�a
bfgklnosttv�w vtsqqoqttvy~�������| {|~��������������� ������������������������������������������������������������������
�����������������������������������
������������������~|{yy{�| {yvtsqooqstvww�ywtqnl�kigfda�_abdgklnoqstvwwyywvtsq�oqttvy|����|�{|~��������������
����������������������������������
����������������������������������������� ����������������������������������������~�|�~|yvtss�qstvw�y�wtso�n�lkigfbb�a_bdgikloqqstvwwyywvtsq�oqstvy|�����~|�{
|~��������������� ��������������������������������������������������������������������������������������������������������������������~|ywvttss�qstv�w�vs�qonnligffddbbdgkllnq�st�v�w�v tqooqqstw{|~~��~||�{|~����������������������������������������������������������������������������������������������������������������������������������������������~|{wv�t�s�qs�t�v�w vttsqqonki�g�fgilnnoqss�t�v wvvtqooqqstw{�|~�~|�{|~����������������������������������������������������������
���������������������������������������������������������������������������������������������~||yw�v tsqooqsstv�wv�tsqnl�klno�qstvvtsstv�wvsqq�stwy�{|~~|�{|����������������������
�����������������������������������������������������������������������������������������������������������������~||yy�w tsqonoqqsv�w�y wvvwvtqqoo�n�oq�stvwvv�tvwyywsqs�tv�wy{{�|�{|����������������������������������������������������
������������������������������������������������������������������������������ ������~|{{�y wvtsqooqqstvww�ywvvtt�s�t�v�w�vw�ywtst�v�w�vw�{|~~�|~��������������� ����������������������������������������� ��������������������������������������������������������������������������������~�|�{ywvtss�q�stwy�{�|�{y�w�y�wy�wy{ywwvtvw�yvttvy{{|�~��������������������������������������������������� ����������������������������������������������������������������������������� ��������~~||�{ywvtt�stw{||�~|�{|�~�|{�y�{y�w
y{{yvttvw{|�~���������������������������������������� ����������������� ���������������������������������������������������������������������������������������~~|�{ywvttqqsstvw{~~�����~
�����~~{{y{�|{�y
{||{vttvwy|�~�����������������������������������������������������������������������������������������������������������������������������������~{�y�w vtsqqstvwy|����������������~|{|�~|�{�|{w�vwy{�|~������������������������� ���������������������������������������������������������������������� �������������� ��������������������������� ������������~{�ywvvttssttw{|�������������� ������~|~��~�|�{�|�{|y�wy�{�|~���������������������������������������������������������������������������������������������������������������������������������� ������������~{�yw�vy|������������������� �~�����~|{{|�~|{{�y�{ywwywwy�{|~���������������������������������������������������������$�������������������������������������������������������������������������������������������~|{yywyw�v�wy{|���������������������������~|{{|~~�~|{y{{yywyyvtt�v�w
y{|����������
����������������������������������� ������������������������������������������������������������������������������ �����������������~|{yww�v wvvwy{||~�������������������������������~�|~��~�{yw�vt�s�t vwy{~������������� ����������������������������������������������������������������������������������������������� ���������������������� �����������������~|yw�vw�y {|~���������������������������������~�|�~�|{ywv�tsqq�o�q
stvw{~��������� ����������������������������������������������������������������������������������������������������������������
��������������� ��~{wvvwy{�|~������������������������������~�|{wvtt�sqon�l�n
oqtvy|~����������������������������������������������������������������������� ��������������������������� ���������������������������� �����������������~{wvvwy{|~��������������������������������������|{||{yvvttssqonl�k�l
nostw{|~~�������������������������������������������������� ���������������� ������������������������� �������������������������� ���������������~|ywwy{|~����������������������������������~~|�{yw�vtsonlkiik�lostvy{�|�~��������������������������������������������������������������������������������������������������������������������� ������������������~|�{|~��������������������������������������~~|{yywvt�vtsonlk�i�klnqtvyy�{|~���������������������������������������������������� ����������������������������������������������������������� �������������������~�������������������������������������������~|{yw�v�tsonllkkiiklnqtvww�y{|~����������� ����������������������������������������������������������������������������������������������������������� �������������������������� ���������������������������������~|yw�t�sqo�n�l�klnos�t�v�wy{|������� ~��������������������������������������������� ����������������������������������������������������� ������������������������������������������������~�|~��~|{wt�sqo�n�l�no�qstvvwy|������������~ y{|~��������������������������������������������������������������������������������������������������������������������������� ���������������������������������~|{yy{|~~|{yvs�q�o�ln�l�n�oqsvvww{~����~||{vwy{|~��������������������������������������������������� �������������������������������������������������������������������� ��������������������������������~�|{y�wy{{ywvs�qon�l�kl�kl�n�oqtvwwy|��~�|�~�|{w�t vww{{~����������������������������������������������� ������������%�������������������������������������������� ����������������
�������������������������������|~||{{yww�vwvsqnn�olkk�i�k�ik�ln�oqtvvw{�|�{�|�{yv�s�tvw{|~~�������������������������������������������
������������� ���������������������������������������������������������������������������������������~{�y�{yw�vt�s
qnlkklnnlki�g�igffgi�kln�oqstv�wy�{�ywvt�qs�q
tvvwwy|~��������������������������������������������
������������� ��������������������������������������������� ��������������������������������
��������������~{�wv�tsqoonkiggiklkkigg�f dbbdgigiigikn�o�noq�st�wvtvssq�no�n�oqstw{|~���������������������������������������� ������������������������������������������������������ �����������������������������������������|y�vts�qonlkg�fg�i�gfdbbaabd�fgilnn�on�ln�oqs�tsqqoon�klnqtwy{�|~���������������������� ����������������������������������� ������������������ �������������������������������������������������������������������������|{w�t�v tsqoonligg�d�f�d�b a_aabdbbdfgill�nl�ik�lno�sqoollkg�fgknqstvwy{|��������������������
������������������������������������������������������������������������������ ����������������������������������������~{yvt�s tvvtsonlkgfdd�b�dba�_abaabddfi�ki�gi�kln�o�nlkigdbaa�_�a"dgklnoqsty{~�������������������������������������� ���������������������������������������������������������������������������������������������������������|ywvt�s�t vttsokifdb�a�b�a�_abddfba�_a__a�bf�g�f�gi�gik�lkiggffa_^\�Z$\^adfgiklnqvy|~������������������������������������ ������������������������������ ����������������������������������������������������������~|ywvvtss�t�s qnifbaa_^_�a�_�^_abddba_�^�_abd�f�df�gfd�b^\ZY�W$Y\_abdgiknqty{~��������������������������������������������������������������������������������������������������������������������������������������~||ywvvt�s�onlgb_^^\\�^�\^_�a_^\�Z�\^_adb�d�bd�b�a_^�_YWWV�T*VWZ\_adgiklotw{~��������������������������������� ��������������� ����������������� ���������������������������������������#�������������������������~||{ywvtsqq�onlkifa^�Z�\�Z\�^\ZYW�VW�YZ\_�a_^_�a_\�Z\ZZ\\ZT�R'TVWY\^adfiklosw{��������������������������������������
�������������
�����������������������������������������������������������$��������������������������~|{yywvtqon�ligfb_\�Y�Z�\�Z\ZZYWVTR�Q�R�TVWY\^�_^\Z\�^
\YVTVWVVYYVQ�O�QRTVWZ\_adgikloty~������������������������������������������������������������������������������������������������
���������������������������������������|{yywvtqnl�kgdba^Z�Y�Z�\�ZY�WVTRO�M�O�QRTWYZ�\Z�Y�ZYWVROQ�R�TRO�MOQRTWZ^_bfgiknsw|���������������������������������������������������������� �������������� �����������������������������������������+���������������������~|{yywvsonkkiigdb_\ZYWY�Z\ZZ�Y�ZYVTTRQQOM�LM�OQTVWYWYY�WVTRQMLL�M�O�M�LMOQRVY\^adgiknsvy~�������������������������������������������������������������������������������������������������������������)��������������������~|{{ywtqolkiigfb_\ZYWY�ZY�W�YWTRQO�ML�JL�MOQR�T VWWVVTRQMLJJ�I�JLMJLJLL�JLMOQTWZ\adgiklqsv{������������������������������������������������������������������������������������������������������������������������� ��������������������~||{yvsqnlkigfb_\Z�Y�Z�YW�V�WYVROM�LMLJ�IJ�L�MOQRTVVTTQOMLJIG�EGIJIJJLL�J�LMORVY\adgikloqsw~����������������������������������������������������������������������������������������������������������������� ����������������������~|{wtqonlifdba^\�ZYWW�V�WTQML�J�LJI�G IJJIIJJLMQ�RQOMLJIGEDDBBDEG�G'IJLJJIJJLORVY\adfgiknosw|��������������������������������������������������������������������������������������������� �����������������������������������������������~|yvtqolkidbaa^\Z\Z�Y�W�V�WTQOLLJIIJJIEEDDEGG�EGILOQ�OMLJIGGEDAA?ABDE�EGI�J�IJLORVY^adfgiklosw|���������������������������������������������������� ����������������������������������� �������������������������&�����������������������~|{wtsqnkigdba_^�\Z�Y�WVROMLLJ�IGEDD�BDGJL�MLJIGEEDB?==?ABD$BDEIIJJIIJLQTWZ_bdfgiiknqw{��������������������������������������� ���������������������������������������������� �������������������������������������������~{yvtsqligfdba_�^\Z�YW�YWVTQO�MJ�GEDBBAA?==�?ADIIJ�L
JIGEDBAA=<<�?AADEGG�IJMQTW\_bdfgiiknqv{������������������������������������������������������¾��������������������������� �������������������������������������������������~{wvtsoligfdba�_^\ZZ�Y�ZYWVRQ�OMJGEED�BA?<::<<=?BEGIJLLJIGEBA??=<<�=?ADDEE�GJMORW\_bdgikiknqt{����������������������������������������������������������������������������������������������������������������%����������������{wvsqnligfdba_a_^\ZZYY�ZYWVRQO�M JGEEBABBA=:88::<=ABDGIJJIGEEB?==<�:<=?A�BD�E
ILMQVZ^adgi�k nqty~���������������� ����������������������������������������������������������������������������������������������������������������|yvsonlkgfdb�a_^\�Z YWVRQOMLLJIGEB�A?<:�8 :<?ABEGIIG�D
B?=<::88:=?�A�B�D
GJLOTY^adgi�k%nqtw~�����������������������������������������������������������������������������������������������������������������������������������������~{vsqonkgfddbaa_^�\�ZYWVTRQOLLJIGEDA??=<<�8:<=?BDEED�B
A=<<::778<?�?�A3BDGJORW\_bfgiiklosv|��������������������������������������������������������������� ������������������������� ���������������������������������������������~{wtsqoli�fdba_�^\�ZYWVTTRQMLJIGEDA=�<:�8:<=?ABBA�?
=<::88778:=-:<<=<<==?BEIMQVZ^_bdfgiknqty~��������������������������
������������������������������������� �����������������������������������������������������'������������������������~ywttsqnkigffdba�^_^\ZZYWWVTTRQOLJIGEB?<�:�7878:<<=?=�<:8�78:578�:�<(=ADGLORWZ\^_bdfgknqv{|~����������������������� ���������������� ������������������������ �������������������������������������������������������������2����������|ywvvtsonligffdb_^^_^\ZZYWVTRRQOOMLIGDA=:�8755�78�:8�75�4�5245�7�:,<?BEILOTVYYZ^_bdgkotwy{|~����������������������������������������������������������������������������������� �����������������������������������������������~|{ywyvtqqokiffdb�_
a_^\ZYWVRQQ�OLIEBA=:88�754�578875544�2�0�2�4�22/0245578:<?BEILOQTVWYZ^adglqtvwy|���������������������� �������������������������������������������������������������������������������������������������~||�{
ywtsqnkgfdb�a _^\ZYWTRQQ�OLIEBA?<:8�75�4�54�20/�-/�0�20//1,-/0224458=?ADILMORTVWZ\_bgnqstvy|��������������������
�����������������������������������������������������������������������������������������������~|~�|{yvttqnkgfdbbaa_^\YVTR�Q�O�M
LJGDBA=<:87�52�0�20�/-�,-/-�/�,(*-/�0)25:<=AEIJLORTVWYZ^binoqsv{������������������ ��������������������������� ����������������������������������������������������������������������������~�~�|{wvvtqnkgfdba_^\ZWTR�QOM�L JGDB?==<85440/�-�/-�,�*�,*('(*,-�/ 0278:=ADGILOQRTVWZ_dilnqty|������������������������������������������������� �������������������������������������������������������0���������������������~����~~|{wvvtqolgfdba^\ZYVTR�Q�ROM�L JGDBA?=:7420/�,-�,*(�*�(�'�'(*,-�/)0458:=ADEILOQRRTY^adgknsvy|�����������������
������������������������������������������������������������������������������������������������������������~~|{wvtsqolifdba^ZYWVTRQQRTROM�L IEDBA=<8520/,�*�,*�(�*(''%%$$%�%'(,--�/(0257:=ADEILMOQRVY\_bgkosvy|����������������
�������������������� ������������������������� ������������������ ��������������E�����������������������������������~����~|{ywtssqqnkgdb_^ZYWVTRQQRTROM�LMJGDBA?=:520/,**((�* ,*'%'(('%$�"$�%'(,--�/'0457:?BDGJLMORTVY\_bfknsv{����������������
�����������������������������������������������������������������������������%���������������������������~~��~|{ywvs�q olifb_^\ZWVT�RQOMLL�MJGDBAA?<7420-,*((�*(%$$�%$"  "$$%(*,--�/ 02447<=ADGJLO�RVWZ^afkosw~��������������
��������������������� ���������������������������������������������������������������������������������������~|�{yvtq�o nlkgd_^\ZYWV�R�Q�OMLL�MJGEDAA?<8720/-,((�*'$�"�  ""$'*,-//�0�258:=AEILO�QRTWZ^bgnqv{��������������������������������
������������������������������������ ���������������������������������������~|{�ywtqon�lkifa^\ZYWVTRRQQOO�M�OMLIGEBA?=<840/-,�*(%$" �� �"%(,--//�0/�0!478<?DGJLMMOQTVY\_dkoty�������������������������������������������������������������������������������������������������������������������~|{ywvtqnl�k�l kifa^\ZWVTTR�Q�O�MOQQOMLJGDBA?<840/,�*('(%$"  ""$$(,�-/0�20�/"0258<?BEGIJLOQTVYZ^bioty~���������������������������������������������������������������������������������������������������������������������~~�| {yvsqnlkii�k igfb_\ZWVTTR�Q�OQ�R"QOMJGEDA=852/,**('%%$"  "$%'',//--/2�42�//0247<?BDEGIJMORTYZ^agnsw{~������������������������������������������������������������������������������������������������������������������������~|{|{ytqonlk�i�gfba^ZWVTT�R�QRTTVTRQOJIEB?:72/,**('%$"" ���"%'(*�57�87420/-,*('(*,-/002478:<?ABDGJMQR�TVWYZ^adgknqssqqssqoonnll�k�ig�f db_\YTOLJIGEDA�? =<87540/--�,*('%�$"� �"$�%'(�*,�-/24578<?B�D�BD�E�GIJJ�I
JLMQRTTVVTR�Q�RTV�WYZZY�WVTQMLJIJLLJIEDA=:�8�:�8:�<
=?AA?=<:887457�85400/-,(('((*-/0024578:<?BBEIMQR�TVWYZ\_dilosttssts�q�o�n�lkiikk�igfddb_^ZYTOMLJIGEB�A?=875420--,*,*(%$"� � �"$%%'�(,--,,-02457:=ABBDDBB�AB�DGI�G IJLOQRTVVT�Q�RTV�WYZZY�WVTQOL�J�MLIEB?<:�7�8�78::<<=??=<:8875457�8742�0/,�(*-//0224578:=ABDGLOR�TVWYZ\_dinqtvvtvvtssts�q0onlkkllkiigfba_\ZYWTQOMLJIGEDBBA?:75542/-,**('$" ��� ""$%'(*�,-/02458<=?ABDDBA�?A�BA?AD�E�G�IJLOQRTVT�QRTV�W�Y�WVTRQOM�L�M
LIDA=<:7557�57�578�:<=<:�87525�75200220-*�(*,�-/0024578<?ADEJMQRRTVWWYZ\_dinqt�vtssqqonlk�l�kifa_^ZWVVTROMLLJIGEDDB?<7�540/-*('%" ��� "$'(�*,-/02578:=?ABDB?�=�?=<=BDD�E�GIJLOQRTT�QRTVW�V�W�VTRQQO�MLGDA?<:�75445�45�78:�8:87424�54200�2/,�*,�-/0024578:=ADEILOQRVW�YZ\_bglost�v�w vtsqqonlkk�lkifa^\YV�T'ROMLLJIGEEDB?<8775420/,(%$" �� "%'�(*,--/25778<=?ABA?�=<::<?AB�D�EGIJMOQQRR�QRTVV�T�V�TRQQOO�M�OMLJGDBA=:�875445�4�5�78::874�2�4�2�0�20-�,�-/�02457:<=ADGILOQRVY�Z�\_afinqst�vwyywvvtqqonlkilkkiifa^ZWT�RQOMLJ�IGEDB?<:887542/,*'%$" ��� $$%%''(*--/24577:<??AA=�<:878:=A�B�DEGILMMOQ�R�T�R�T�QO�MLMOOLJIGEDB?<::8754242�45�7�8752�2�420020�/-,,-/0�2�458<=?BEIJMOQRVYZ�\^_bfknost�vwyyw�vsonlkiiki�gfb_ZWTR�QOLJ�IGEDB?<:887542/-,*'%$" ���� "$''(*-/0245778<�?=<<�:87557:=?AABDEGIJLLMORTTVVT�R�QOM�L�JLMMLLMMLJ�I GDA?<:8754�2�45�75442�2�4�0�20-,-/2�4�578=??BEILOORTVYZ�\�Z\_bgknoqstvwyyw�vsolkiggig�fdb_ZVRR�Q"OMLIIGGEBA?<:8874420/-,('%$"" ��� $''(*,/0457�8<�=<�:�8754457:<==ABDEGIJJLORTTVTR�QO�MLJ�IGILMM�L JIJJIEDA=:7544�2�4�2 4557554220�0�2�42002�42/--/2445778:=?ABEILOQTVWY�Z�YZ^adgklnostvwwv�tsolki�gfdbba^ZV�RQOOMJIGGEBA?<:885�420/,('%%$" ��� $'((*,/2578�:<==�<�:�<:8754224588:<?ABDEIJJLOR�TRQ�OM�LJI�GILMM�L�J�LJGEB=:75�4202�4�54220�/�0�20/2�420--/0445778:=ABBEIJMQT�W�YWYY\^adgklnqstvwvsstsqlki�gfb�a_\WT�R�Q OLJIGEDBA<:875�4 2/,('%%$" � � �� $'((*,/4578:�<�=�<�:87544�24788:=?ABEIJLLOQ�ROM�L�JI�GILMMLLMM�L�MLIGB=<875544554420�2544�20/�-/00//0�20�/024578:<?ABDGIJMQTWW�V�W�Y!Z\^adilnoqstvtsstsqnlkiigda__^\YVT�R�T�R QOMJIGEDB=:87�540-*('%$"  � ����$'(*,-04578:<�=<:�875�4�24788:<=ABEIJLLMO�QOL�J�I�GI�JMOOMMOO�MLJGB?=<:87557754�2�4�20/-�,�-/-/0�2�02457:<?�A DGIJMRTVVT�RTVWYZZ\^afilnoqst�sqnlkiifb_^^ZYWVT�R�T�R QOMJGGEB=:8755�752/,*('$  � ����$'*,-/24578:<�=<:�875445�4788:=?ADEIIJLMM�OMLJJ�IJ�MOQQOMOQOO�M LJGB?==<:8�74�2�0�2�42/-,�*�,�-/02�4�2458<?�ADGILOR�TR�QRTVWYYZ\_bfiklno�qolkiigda_^\YWVV�T�VT�R QOLIGEB?<8�7�8740-,*(% ����� $'*,-/24457:<�=<:�87�57�578:<?ABEG�IJ�LJ�I�JLO�Q�O�QOMLLJIEBA?=<::88�754�20/0�2�42/-,�*�(�*,-/02554�2478:=�ABDGILOQ�RQ�OQRTVVWYZ^abfgikl�nonlkiggfba_^ZYWVVT�VWVVTTRRQOMJGGDA<:�8:852/-,(% ���  "%'*,/�2 458:==??==<<�:�8�75744578:<ABDGIJJIIJJ�I�JI�G�IJLMOQRR�QROOQRQMLLJIEBAA=<:<::87754�2�02442/-�, *((**,-024554�247:<=?�ABEEGILM�O�Q�OQR�TVWY\_abdfgikiiklkigfddba_^\ZYW�VW�Y�W VTRQOOMJGGEB=<�:�<
8520-*%"�����""$%(,/0224578<=??�=<�:8754458:<=ADGIJLLJ�I�G�I�G�IJLOQQRR�QRQQRRQMLLJIEDBB?=�<:8755�42�0�20/�- ,*((**,-04�54�247:=??�A
DIGIIJLMLLM�OQ�RTVVWY\^_abdffddfigffdba_^\�ZYWVWWYZZYWVTRQOMMLJGGEB?==�< =?<852/,'"������ "$"$%(,/0224578:<=�?=�<:8�57:<=?ADIJ�LJ�IG�EGII�G�IJMQRRTTQQRTRRTRQMLJIGEEDDB?=<:87�54�5�20�/�-,�*,-04�5�47:=?�ABE�I�JLMO�QRT�V WYZ\^_abbaabdd�ba^\Z�Y�W�YZ\\ZYVTRQOMLJIGEDB�A�?�A?<852/($ �� "�$'*-/0245578::<=�?=�<:8�78:<=?ADIJ�LJ�IG�EGIIGG�I JMQRRTTRQR�TRQMLJGEE�GEB?=:87�5�7540�-�-,�*�,-/04�5�458<?�ABDGGII�G�IJLOQQ�OQRT�V
WYZ\^__^^_a�_�\ZYWWVVWWYYZ\^\ZYVTQOLJJGGDD�BABBA=<850*%"�� "�$'*//02�5�7�8:<==�?=<�:8�7 8::<=ADIJJLLJ�IE�DE�GIJ�I JMQRRTTRQQ�R�Q�MLIGG�IGDA?<:87�5�7540�-,�,�*,-/0024�5 7:=?AA??AABBDE�G�EGIIJMOOMMOQRTVVTTVWYZ�\�^�\�^�\ZYWVTTVWYYZ\^^\ZWVROLJJGE�D�E�DB?=:72-($�� "�$%(,/024�5�7�8�:�<=�?=:�8755778:<=ADGIIJLJ�IE�D�EGI�JLMOQQ�R�Q�OML�JIGDA?=:87�5�7540�-,�*,-/0224�578:=??A�?�ABAAB�EDEGGIL�M OQRTVVTRTVWYZZ�YZ\\�ZYVTTRTVWYZZ\\ZYWVROLIIE�D�GEDBA?<850,% �� ""$$"$%%(*-/024�5�7:�8�:=�?<87�5 78:=?ADEGI�JIGE�DEGJ�L�M�O�QRQQOO�M�O�M�L�JGBA?<:87�5420//-*�(*,,-/24�5�7�57:<=�?�A�?AB�D
EGIJLLMOQRT�VTRRTVWYYW�VWY�ZYVTTRRTVY�Z YWVTROLIGE�DEG�I GEDBA=:72-($���� "$$""$'(*,-/024�578::�8:=??=:75�4�578<?ABDEG�I�JIGEE�DEGJLL�M�OQRRQOO�M�OMLIEBA=<:8775544�20-*�*(,-/02457�8�78:=?A�?A??==??�ABDEGGIJMORTTVTRR�QRVWWVTR�TVWYY�ZYWTTRTTVWYZZYWVVRQOMJIG�E�DEG�IJIGEDA=:82/,'"�" "$$""$'(*,--/024457�8:<==:85424244578<?B�E�G�IGE�DEG�JLMLMM�OQRR�OMOO�Q�O�QOMJGDA?=<:88775422442/,�,-/25778:�<�:<?AA�?�=?AD�EGILOR�TRQQ�OQTVVTRQR�TVWYZZ�YVTTVVWWYZZYVTTQO�MLI�G�EGI�JIGEB?<840/,'" � �"$%'(*�,-/0245�78�:�<:87422422457:=AD�G�EGEEGGE�D�EGI�J�LMO�QRTR�OQ�RQ�O QRRQMLIEBA?=�<
:875445540-�- /0278::<=??=�<=?ABA�?=�<�:<=ADEDEGIJMQRTTRQO�MOQRRQ�O�QRTVW�YW�V�W�ZYWTRRO�MLJII�GIJ�LJIGDA=:542/*'$ ��� �"$%'(*�,-/024�578�<875420202457:?BE�G�E�D�E�I�JLM�Q�TR�OQ�RQO�Q�TROLIGDBA?=??=:87�5754/�0247:<�=?AA?�=?A�B�A?<�:�8 :=ABDDEGIJLOQ�RQM�LM�O�M�OQRT�VWYYW�V
WYZYWVTRQOM�LJ�I�JLMMLLJIGEB?<8740-*%" � � �"$%'(*�,-/04�57:�=<87542�02478<ADE�G�E�DE�GI�J�L�JLO�QRTTRQOOQ�R�Q�R�TRQMJIGDB�A
?<::8778752�4578<=�?�A?�=?AA�B�A?<:88:8�7 8<=ABBEGJJLOO�QOL�J�M�L�MQRR�TV�W�V�T
WYYWVTRROML�J�L�J�LJ�M�LJIGEB?<:852/,'$ � "� "�$�"$%'*,�-,--04�7�8 :==??=<87442�02478=ABE�G�EG�I�J�LM�L MOQQRTTRQQ�OQRR�Q�R�T ROMLJEEDBBA?�=<�8754�7�8:<?�A�?�AB�DBA?=:88:8�7
8:<?ABDGJLM�OML�J�L�M�L�MO�QRT�V�T
VWWVTTRQMLJ�I�J�L�M�LJIGEB?<:852/,'$� �"� "�$�%�$%'(,-�/�-058::�<=??=<:7�4�2 47:=?ADEGG�I�GI�JL�M�O�QRTTRQ�OQ�R�T RQOLIGEDBB�A?<::877�:<=?�B�A�B�EDA??<:88�7
8:<??ABGJLM�O�MLJ�I�J�M�L�MOQ�R�TRTTROLJJIGGIIJJ�MLJ�I EDB?<8852/,($�"$�"�$�%(*,/�0�/278::<==<<=?==<8�5422458<=??ABEGII�J�IGI�JLJLL�MOQ�RTRQQ�O�Q�R�T�V�TRQMJIG�D�B�DB=<<:88�=?AD�ED�B�D EGGEDBA?=<:8�7 8:<=??ABEIJL�MJ�I�GIJ�LJ�IJLM�OQR�T RQQRRQMLJJIGG�IJ�MLJI�G EDB?<8752/,(%�$$�"$%�'(*,/�02478::<==�<�= <:87754457:<=�?ADGII�J�IJ�L�MOQR�TRQQ�OQ�RTV�WV�TROLIGEEGEEGGDA?=�<�A�BABDE�G�E�D�E�GEDBA??=<:�8 :<=??AADGI�J�LJ�IGEG�I�JG�E�GILMOQR�TQOOQQOLJIJIGGIGGJMM�L�J�I�G�E
DBA=:752/,(�%$$ ""� "$�'(*,/�0�2�478::�< =<::8875578:<<�?BGII�J�I
JLLMMOQQRRT�VTRR�Q�R�QRTV�WVTTVVTROLJIGIJIIJIGBB�?�D�EG�I�J�I�G�EDBA�?=�<�:<?�ABDE�GI�J�IGEEG�E�GEDD�B�DEILOQ�RQO�MLJIIJIGGIGGILLJ�I�JIGEEDBA=:742/,('%%$"� � "%'((*,-//02�4578�:�<�:�8�:<=�?BEGI�JLMOQ�RTV�WV�TR�QRT�VTQMLLJIJ�LJIEDBBDD�G�I�JL�M�L�J�IJIG�E�DBA�?�=�< =?BAA?AABD�E�G�IG�D�EDBBA??AABEIMOQRQQOML�J�I�JI�G�I�GIJLJIEEBA?<8522/,*('%$"� � "%'�*,-/045544557788:�<�:�8�:�< =??ADEGIJL�JLOQ�RT�W�V�WVRQQOQR�T�VTROMLL�JL�MLJIEDEGG�I�J�LM�OM�LJIG�EDBAABBA?�=?ABA�?AB�D�EGIIGD�BDEEDBA?==??ADGJLOQOMLLJ�I�JI�G�EGIJLJIEDBA=:7520-,*('%$"� � $%'*,,**,/2455�4�5�78:�<�=<�:�<=?AABDGIJ�L�JLO�Q�RTVWW�VW�YWTRQOOQ�RTVVTRQOM�LM�OMLJGEGII�JL�MO�Q�RQOOMLIIGGEEDDBB�D B??AABB?==�?�ABDEEGGE�B�A�BDBA?=<=�? BEIJMOMLJJII�G�I�J�GIG�E�DEIJLJGDBBA=:750/,**('%$�" � "%''*,,**,/2�4�24557�8:<<�=�<�=�?�ABEGIJL�M�JLOO�Q�RTVWY�WY�ZYVRQ�O�QRTTRQOMMLLMOOQQOOMLJ�I�J�L�JL�MO�RTVVTRQML�JIG�ED�B?==??�=?ABDDEED�B�A?=<<=�?ADGIJLLJ�I�GIJJIGGIG�E�DEIJJIEDBBA=:850-,*('%%$�" � $'((*�,/�2 4578::88:<�=�<�=?�ABDG�IJM�OMLLJJL�MOQQRTVWWYYWWY\\ZYWTRQ�O�QO�MOQRRQOML�J�L�M�J�LMO�TWYYWVRO�LJIGGIIGGE�DBAA?=<==�<?AAB�D�BA?AA�?�=�<=�?ADEGIJ�I�GIJ�I�G�EDEEGIIGEDBBA=<850-,*('%$"�"� � "'(**,�-�,/2�0�2�4578:88:<<�=�<�=�?�ABDG�IJM�O�MLJLMLLMQQRTVWWYYWWY\^\YWTRQ�O�QM�OQRRQOML�JLM�MLJJLLMQTVVYZZYWTQ�ML�J IGEDDEEDBAA?=�<�:<==?A�BA??AA?�=?==?AA�?ABEG�I�G
IGGIJJIJJIG�E�GEDBA?=<852/,*'%$" � � "%(*,-�/�-/�0�2457�8�:<�=�<=�?�A�BDE�GIL�M�OM�L�JLOQRRTV�W Y\^\ZWVTRQ�O�MO�Q�O�QOML�JLM�O�M�LMLMQTWWZ�\YVTQO�M�LJGG�ED�B?=<<::�8�:<=?�A�?�=�?�A�?ABE�G�E IGIJLLJLJI�G�I�G�EDB?==<840-*(%$" ��� "$'*,-�/�0�/�0/25�7�8:<�=�<=??�A�B�DG�J MOOMLLJIJLMQ�RT�V WY\^\\YWVTRQOO�M�OQOOQOOMLJ�LMO�O�MQVWYZ\^^\YWVROMM�LJ�IGE�DA=<<:�8�78:<�=�?�=?�A�?ADEE�D�E�GIJ�LJ�I�JIGEDBA=<<:740-*'$"   "$%%'*-�/�0�/�- 0455445778:<�=�<=?ABBAA�BD�GIL�MLJIIJLMO�QR�TVWZ�\�ZYWVRQO�M�O�QOMLM�O�O�Q�ORVWY\^�_\ZYVROM�LJIIJGE�DB?=<�:�8�78:�<=??�=�<=�A�?ABDD�BD�E�IJLMLL�JILLJIEBA?<::8540-*(%$ � "$''(*-�0200�/�-�,-0220224577:<==<<=?ABDBA?�ABDEIJ�LJIGIIJM�ORQRRVWYYZ�\ZYWTRQOO�M�L�MOQRRQOO�QO�O�QTWYZ^_�a _^ZYVROMLLMML�JIG�E�DB?=�<:8�78�:<�=<�:<?�A�?�A�B�ABD�E�GIJ�L�J�LJIEB?=<:87542/,*(%"�  $'(*,-0�20//--,,�*,-�/�024557:<<:<=?ABDBA�?�A�?ADG�I�GIL�M�OQRTVWWYZ�\ZYVTRQO�M LJJLMMOQRRQQRR�QO�Q�RVYZ\_a�b a_\ZWTQOMMOOM�LJGEEGGEDBA?=<<::8�7�8:�<:8::<=?AA�=�?�ABDD�EGIJJL�J�LJIGDA?=<:75440-*(%" �  $'*,-/022�0�-�,*,�*�(*,�-/0244578�:=?ABDBA?�A�?=??BDE�G�EGJ�LMOQRT�WYZ\\ZYVTRQMMLLMMLJIIJMMOQR�Q�R�Q�R�T�VWZ\^a�ba_^ZWVTR�QO�M LIGGIIGEDBA?=<�:�8�:�8�:�<=??�=?�ABD�E�DEG�IJ�LJIGGEBAA?<875540,(%$" "$'*-//�0�/-,�*�,*�(*�,-/2�4 578::<=?ABBAA�B?==??AAB�DEGIJLL�JLOOQRV�WYZ\ZWVTQOMMLLMMLJIIJMOQRR�Q�R�T�V�WY\__b�dba__\YWVT�R�Q�OMJ�I�GEDB?=�<�:�8�7�8�:�<�= ?ABAA??ABE�G�ED�BD�EGI�JIGEEDBA?<:88752-*'%$"" �"$'*-�/�-�,�*�(*((*,/0�2 4578:<==??ABB�DB??=�?�ADEG�I�J�IJMMOQR�VWYZYWTRQ�O�ML�JMORTR�Q�R�TV�V�W�YZ\_aab�d baa_^ZYWVV�TRQOL�JIGEB?�=�<:�87�5�7�8�:<=?A�BA??ABE�G�EDB�A�BDEGII�JIG�EDBA=<::8740-*'%% %$  "$'*,--�/�-,�*(�' (*-/0024578:<�=?BD�EDBAA�?�=?BEG�I�J�I JLMOOQRTVW�YWTR�QOMM�LMQTT�R�TV�W�W�Y�Z\^�ab�d baba_\ZYWW�VWVROM�LMLJIGEA�?�<�=:�8�7�5�7 8::<=?AABB�A�BDEGGEDBA�?ABDEGII�LJIGGIGEDA=::8852/*(''�' $" ""$'(*,-//�-�,*,*('�$�% '*-/02247:�=?BD�E�DBA�?=�<=?DEGGIIJ�IJLLMOQQRV�W
YWVTTRRQQOM�L�MOQ�T�V�W�Y�Z \^^_aba_ab�d�ba_^\\ZZ�YWTQO�M�OMLJIGDBAA=<<==<:�8�78:<=�?A�B�D�EDBA?==?ABDEGIJMOOML�JIEB?<:8874/,**(�('%�$ %''(*-//-,-//�-�,*'$�"�$ %(,/02247<�?�=?AB�DB�A?<�:�<=ADEGIJJIIJJLLMOQQRV�W�Y�WVTRQOMLLMMOOQRTTVWY�Z�Y\^^\\^_abdda__ab�dba__�^�\�ZYVRQOO�Q OMLJIGEBA?�=�<�:875�78:<=�?�A�BDEEDD�EDBA�? ABDDEILOQQOL�JIEB?=<::840--,*�(�%�' (*,--,,-/0�/�0/,*(%�"�$ %(,-02248<�?=??A�BDB�A?=<�:�<=?BEGIJJIJLJLLMOOQRVWVWY�ZYVTRQO�M QOQRVWYZ\^^\\�Z^__^^_adffda__ab�db�a�_^\ZWVTRRTTRRQOMLJJIEBAA?�=<:87�5�78:<=?�ABDEGG�EDB�A�B�DEILOQQOL�JIEBA?=<:8520/-*�(�*�(�'(*,--,,-/�0�2/,(%$�"�$ %(,-/0248<==�?�=?�A�B�A?=<�:�<=?BEG�IJLMLLM�OQRTVVWZ�\ZYWVTRQ�O�Q RTWZ\^^__^�\^�_�afggdbaabb�d�b dfdbdbb_^\ZYW�V�T
RQOMLLJGDBA�?�=<87�5�78:=??B�ABDEGII�GED�B�D�EILOQQOM�JIEDDA=<:87520-*(*�,�( '(*,--,-//�02-*'$�"�$�%(*,-/048<=<??=<<=?�A�B�A =<::<==??BDE�GJLM�L�M�OQRTVWZ\\^^\ZYWVT�R�QRTVY\^�_�^�^�_abfggf�dfgig�fdba__^Z�Y�W VTROMLJIGD�A?=:87�5�78<?AA�BDEG�IG�E�DE�GIJMQQOMLJ�I�G EB?<:88740-**,�-,*((*�-/�0�/,(%$�"�$%''(*,,-/27:<<==<:<=?ABBAAB�DBA=�<=?�A�BDEGGILMMLLMMOOQQRVYZZ\^^\\ZYW�VTRTVWZ\^�_�^�^�_adfgg�f�d�b�d�fgi�k�igfdbba_^�\�Z YWVRQMLJIE�BA?=:88554558:<=�A�B�D�EGIGGII�JIG�EG�I�JLOOMMLJ�GEDA=�:850-,�,-�/-�,-//02200//--,('$$�"�%�(�*,-058:<=<::<=?BDDAABDEEDA?�=?AABB�DEGGIJMOMM�O�QRV�YZ�\�ZW�VWY\\�^�\�^�^�_abf�g fddbbdfgik�lkig�fdb�a_^\ZYWTQMLJGEDDBA=<::75457:=?A�BD�E�G�IJLLJI�GI�J�LI�G EDB?<::872/-�-/�0�/0245420//-,('%$$""$�'(�* ,-/258<<::<<=A�D�BD�EDB�A�BD�EG�IJMOO�QRTW�YZ�\�^�_^Z�YZ\�^�\�^�^�abdg�i�gf�dfgil�o�nli�gf�d�a
_^ZZWTQMLIE�DB?=<:87578:?BDEDDE�GE�G IJIJLMLLJIJL�M�J�IGE�G EDB?<:87740/�/�0 24578542//-*'%�$%�(�*(�*�,-047�:<=A�DBEGE�DE�DE�G�IJLMOO�R�TV�YZ\�^�_�a_�\^_�a�_^\\^^ ^_bbdfiklkig�f�gilossq�onki�g�f�g fddba^\ZWTQMJG�EDBA=<:�8:<?DE�G�I�GI�JL�OMLMO�QOLJIIGG�E�G�E DBA?<8755420�0�24578::8740/-*'%$$%%'(**((*((*�,-/2578�:<?AB�DEGEDDEGII�GI�J�IJLMOOQRT�V�WY�Z\^�_a�ba__ab�db�a_^^_^_abdfgk�lki�gikkoqssqqooqolki�g�i�gfda^\ZYTQMJIGGEDD?=<<::<?AEG�I�G�I�JM�QOMQ�RQMLIIGE�DEGGEDBA?=<:7745422�2�024578:<<::874/-*('%%''(*,,((*((*�,�/ 245788:=AB�D�EDEIJJLJJIIJLMLLJJLMOQQRRTW�Y�Z�\^_�ab�dfggf�dba�_�abdfi�lk�iklnq�s�q�onk�ik�lkgfda__^YTQOLJIIGEBA??==?BDEG�I�GIJJIIJLO�R�Q RTTRRQOMJIGED�BDEGGEDA?=<:87755�4�54�2458::<==<<:850-,*(''((*�,*�(*�, -/0224578<?AB�D�EGJLLMM�LMOQO�MOQR�TVY�Z�\^_a�bd�f�g�ig�fdba�__abdfik�l�knossttq�sq�on�ln�onkgf�ba^WTROMLLIGDDBBAABDEGIJ�IJI�G�JLMQR�TVTRRQOMLIGEDABBDE�GDA?=<::�8�7�8�7�578<==�?=:850-,,�*,�-,�(,--,--/002478<??ABBDD�EGJLLM�OQRTR�QRT�VW�Z\ZZ\\^_abddbbdf�g�i�k iggffdb_^_^_abfgik�lnqssttssttsqqss�q�sqolig�f da\YWTRQOLIGG�E�GIJJ�I�JI�GIL�MOQRTT�V
TRQQOMLJIGD�BDE�GEB?=�<�:�<�=<�:<=??�A=:752/--�,�-,*�(,--�,-/0247:<�=?ABDE�GIJLMOQRTV�WV�TVWYWWY�Z�\^_ab�d�f�gi�kigffdb_^^�^
_bfgiikklln�ono�q�s�t�st�v�tsqonk�i
fb_^\YWTROL�J�I�G�JI�GILOOQQRRTVWWVVRRQOMLLJJIGE�D�EBA?<�=�?==?ABBAA?==?AABBAA=<7540//--�,�-,�*,--,**,-/245:<==<=?ADEG�IJLMORTWY�ZYW�Y Z\ZYZ\Z\\^\\�^�_abddff�g�k�igfda_^^�^_bfg�iklnoqss�q�s�t�vw�ywvtsqon�lkgdba_^ZWVRQOMM�OMLJII�G�I�GIJMOQ�R
TVWWVTRRQOM�L�JIGE�DBA?==�?ABBAABD�EBAA�B A?=<875420/-�,�-,�*�,*((*,/2458<==<<=ADEGI�J LMORVYZ\^^\\�^�_^�\^__^^_�a�bdfg�i�gi�k�lk�igda__^�^ _adfgiklnqqs�t�s�tvwy�|{ywts�qonnkgfba_\YWVTR�Q�ROMLJ�I�GILOQQR�QRT�V�TRQO�M�LJGGEEDDBA�?�=?AAB�DDE�G�IEDDED�B A?<::887520/�,*�,*�(�*�(*,-0457:<=<<=?BDGI�J LMOTWYZ^aa__a�b a^^\^_aa__ab�d�fgi�k�ik�lk�igfba_^
^_aabdgiloq�stv�wvtt�stvw{|�~|{wv�tsoonkgdb_^ZYWVT�R�TROMMLJJLJ�I�GIJMO�Q�OQR�TRQ�O�QOMLJ�IGEDA?�=?ABD�EG�I�JI�GEDBBA?<�: 87420-,*((**('�%'�(*,-04578:�<=?ADG�I�JLMQTWYZ_�bd�fdb_^\^_a�bdfg�iklnn�l�nlk�igdba_�a dfgknqssttvw�{
yvtsstvw{~�����#~|ywwvvtsqolifb_^ZYYVVTVTVTROMOMLLML�I LMOOQQOOMMOQ�R�Q�RQOM�LJIGEA=<�=?BDEGEGG�J�IGEBA?=<�:8740-,(�'�%�$�%'�(*,-04578::<<=?ADEG�IJLMOQTVYZ_bdfggiigfda^\^_adffi�klnoonnoo�q�onlk�igfdbdbabfgiloqsstvw{�| {wvttvy{~���������|{yywvvtsolifb_^\ZY�W�VTRQOO�MLJIIJLM�O�MO�QR�TRQ�OMLJIGB?�=?ABDEGGIJ�LJ�IGDA=�<�:850-,(�%�$�%'�(*,/24578�:=ABDEGIJJLMOQRTVY\_bfi�kigfb_^^_bfgilnn�l�no�q�sqonl�kigffdbdgiklqqsstwy|�~�|{ywwy{|��������+�||{{wvvtsolifda_^\ZYYZYWVVTRQOMOOMLJJIJLMOO�MOMM�O�QRT�R�QOMLJIGDB�?ABDEGILMOMLLMJ�IGDA=�<�:
8750-*'%$$"�$%''�(*,/24557�8 <ABDEGILLM�QRTWZ^adgillkkigfb�adfil�n�o�q�s�t�s qonllklkiggffgiklnqsttvy|~���~�|�~��������~~|{wvttsolkgfba_^�\ZYWWVTRQ�OML�JLMOO�M�OQRR�Q�R�QOLJI�GEB�ABEGIJMOQO�MLJII�GEDB?=<<�:87540-*'%$""$$%%'�(*,-024457�8 <?BEGIJMOQ�RTVY\_bfgi�kigf�dfgk�n�o�qs�tvwvt�s�tsqon�lki�ikllnnoqstvw{�������������������~|{wvtssqnlgfba__�^\ZYYWVTQOOMLJIIJJLMOO�MO�Q�O�R�Q�O�QOLJIG�IGED�BDEIJJMO�Q�OLJII�EDB?=<=::875540/,'%�"$%�'(*�(*,-/0245�7
8<?BEILMQQR�TVWZ^adfg�i�g�fgil�n�qs�tvwywvv�t�w vttsqonnlklno�q stvw{~���������������������~|{wvtssqolifdbaa�_ ^\ZYYWVRQOLJ�IJLM�O�MO�Q�OQ�RQOMO�QOMLJII�JIG�EGIJJLO�QOLIGG�EDB?�= <:8755420-(%�"$%�'(**((*,�-/245�78<?BEJMQ�R
TVVWY\_bddf�gikl�no�qs�tvw�ywvvwyyw�vtqonloq�s tstvwy|��������������������"���~|yvvtsqonligfdbbaabb_\ZYYWVTQMJ�IJM�O�M�OQ�RQOMM�OML�J�L�J�I�G�IJM�OMJG�EDBA?==<<:855422/(%"" "$�'(�*!,-//-/0457557<ADGLMQRTTVWYZ\^abdbd�f�g�i�knln�o�qs�tvwy�{�|yww�y�w�ywtsqo�t�v wy|�������������������~{wvvtsonllkigfd�b�da^\ZYYWVRMJIIJJLM�OM�L�M�OQ�RQOO�MLJJL�ML�J�IJL�M�LJG�EDBA?=<<=<:75442/*'$" "%�'(*,--�/04�57<AEILMQRTVWYZ\^_a�bd�f�g�i klnoqooqss�qst�vwy{|�~|{{�y {yy{{ywvvtyw�v�w y{~��������������������~|ywvvtqonlnnlkgf�b�d b_^\ZZYWTOLJJ�LM�OM�LJL�J�MO�QRQQOMLLJ�LJLMOOML�J�L�MJIIJL�J�IE�D�EDBA??=<=?=<87552/*(%" "$%''(*,-�/�0�4�57:AEILMQRTWYZZ\^_abab�dfgiikloq�svwwvvwy{|��~|{{y{y{�|�{y|{y�w�y{|~���������������~{ywwvtqonnoonlifbb�d b_^\\ZYVRO�M�OL�J�I�JLM�O�QOMLJIJ�LMOQQOM�LMOQQOL�JI�GE�D�EDA?==<<=?=<:8752/,*'$�"$%'(**,-//--/02�4�57:?DILOQRTWYZZ\^_�ab�dfikklnqs�t�s�t wyywwyy{|����~||�{|�~�~|�{�|����������������������~|y�wtq�onligdd�f dba_^^\ZWTQOM�O�ML�I�G�IJ�L�MOMLLJI�J�LO�QO�M ORTRQMLJIGG�E�DEDA?<<::<=<<:8540/-,(%�$%''((*,�-�,-024�5 7:?BGLQQRTWZ�\�_abd�fiklnoqs�t�st�vw�y�{|~������~~|�~�����~~�� ������������������������~{�yvs�qonlkigff�g fdbba_^\YVRQ�OM�LJG�EG�IJ�L�J�LMOQRR�Q RTVTQOMJGEE�D�E�DB?<�: 87420//-,('%%'�(*�,�*,/25�78<?BGLQRTVWZ\^^�_abf�gikno�qsttsstv�wy|�~������������������ ��������������������������|{y{wvsqqolki�g�i gfddba^ZYVTQ�OMJJIGE�D EIIGGEEDDEEGIJ�L�MOR�TVWTRQOJGEE�D�E�D�BA?<�:�8 75420//--,*((�*�(,/257�8<=ABGJQRVWYZZ^^�_ abfgikkloqqooq�svw�y�wy~�������������������������������������������������~|{{ywtsqolki�gi�kiggfda^\ZWTQOOMJIGED�BDEGGEEDBAABDEGILM�OQTVV�WVTROLIG�EDBAA?<�:877�5420�/�-,**((''(,/257:<<=?BDGJORVY�Z\�^
_aabdfgklno�q�o�qstw�y{~����������������������������������������������������|{ywvtsolkigg�i�k�l�kigb__\YVROOMJIGEDB�D�E�D
BA??ABDEGLO�QRVVWYYZZYYWVTOMJI�EG�E�G�E�DBA?<�:�87442�0�/-,**(('((,/257<�=ADDGJORVYZZ\\^^\_abf�gklo�q�o�qsvy{{�y�{�~ �������~~�����������������������������������������~{ywwvtqnkigg�i�kl�nlifba^ZWTQOMLJIEDD�EDBA�?�ABDGLOQ�R�T�V WYZ\^\ZZYVQOMJ�GI�G�IG�EDBA=<�:�<8�5�42�0/-�,
*((**,/258<�=
ADEILORTWYZ�\^_dg�iklo�qsvy�{�|�~�������~���������������������������������������������~|y�wtqnkiggi�g+iknqqonlgfd_\YVRQMLJJGEDEEGGEEBA?=??A?ADGLOR�T�V WY\^_^\\ZWRQOL�IJ�G�I�GIGEB?�<�=�?
<8875577542�0/--,�*�,/047:<=??BDGJMORTWY�Z\_dik�iko�qstvyy{|~~��~~�������~�����������������������������������������~{yywtqnlk�i�gilossqonkifa^ZYVROMLLIG�E�GEDA?�=�?ADGLORTVV�WYZ^�_^\YVRQM�J�I�JIGDA�=�?�A
?<:8778:854�20/-�,-/2457:<=?ABDGJMORTVW�YZ\_dg�ikno�qstvvwy{~���������~����������������������������������������������������||{wvsonl�knossqqonkgb^\ZVRQOMMJIG�EBA?=�< =ABEJMRRVW�Y�W�YZ^_a_�a^ZWTQML�J�LJIGDB�?�A�BA=�:<875�420/�-/04�5 8:=?ABBGJMORTT�V WYZ\_bfggiikno�q oqstvvwy|�����������~������������������������������ �����������������������|ywvsonll�noq�sqolid_^\WTRRQOLJIGEDBA??=<�:=ABEIMQRV�Y�Z\_�a�b_\WTQOM�L�MLJIGEDB�A�BA=�<8�752�024�5 78<?AABEILMQ�RTWYZ\^_bdfgiknoqssqoqsstvw{~���������~~�������������������������������������������������������~{ywso�n�q�s�tsqnkfa_\YWVTROLJIGDBAA==<<�:<?BEIMQRV�YZ\^\^_a�b_\YTRQOMMLLM�OMJIIGGEDD�BD�BA?�=<:8�7�854�245�7 578:=AABDGJMO�QRVYZ�\_abdgiloqssqoqsstvw{�~���������~~��������������������������������������������������������~|ytqooqs�t�vtsolgda^\ZYVRQMLIGDBAA=�<�: <?BGJMQTVWWYZ^�_a�ba^ZYVTRQOOMMO�QOL�JIGE�DBA?==<:�8:<<:7�57�8�7
8:<?ABBDGLM�OQRTW�Z\^abfgknqssqqsttvwy|�~����������������������������
��������������������������������~{vsqqstv�w�v�wtsqnkgba_^ZWTROMJIEDBB?�<�:<=ABGJMQTVWWY\_�a_\ZYWVTRQQOOQ�TRQMM�LMLIGEE�DBA?==<<�:<=�?<:88:<::8778:<==?ABDIJMM�OQRTWWYYZ^abdfiloqsqqsttvy{�~�������������������������������������������������������������������|yv�tvy�{y�wvtsqnifdba^YVTRQMJGEEDA=�<=?BDGJORTVWWY\_aa�ba�_^\ZYWVTT�RTWYWVRQQ�OMLJIG�EDBAA??==�<=?A�B A?==??=<:878:�<=?ABEILM�OQRTVWYZ^abdfiklo�q stvw{|~~��������
��������������������������������������������������������������~{y�wy|�~|y�w*vsokigfda\YVTROLIIGED?=<<==?ADEILORTVWWY\^a�ba_^�_^\YWVVT
VTTVWYZZYWT�R QOMLJIGGEDBBA�?�=?AD�EDBABDDB?<:788::<==?ADGIL�O�QRTVWZ\_abdgikloqstvwy{|~���� ����������������������������������������������������������~�|~��~{�y0wtolkigfda\YVTQOLJIGEB?==?ABDEGILORTVVWYZ\_bba_^^�_^\YW�V�WYZ�\ZYWVTT�V TRQOMLJIGEDDB�ABE�GEDEGGEB?<�8
:<==?ADEGJM�O�QRTVWZ\^_abfgiknqstvwy{|~�����������������������������������������������������������������������~|�{ywtonlkgffb_ZWVRQMLIGEDA?ABDE�GIJMQ�RVWWZ^ab_^\\^__^\ZY�W�YZ\\�^\ZYW�V WVTRQOMLJJIGEE�DBDG�IG�I0D?=::88::<<=?BDGIJLMMOOQRVWZ\^^_bfgiknoqstvy{||�������������������������������������������������������������������������������~||�{ywtqonligfda^ZYVROLIGEEDBDEG�I�GILO�QRTVY\_a_^\\^_a_^\\�Z�\^__^\ZYWVVWWVTRQO�MLJ�IGEGI�JIEA?=<�:<=ADG�IJLMOQRVY\�^(_bfgiknoqqstwy{|~������������������������������������������������������������������������������~||�{ywtqqonkigfba^ZWTQMJI�G EGGIJJIGGILOQQOQRTWZ^__^\\^_a__^^�\�_�^_aa_^ZYWVVWWVTRQQOQQOO�M�LJIIJ�LJIEBAA=<�:<=AD�GIJLOQTVZ\\^^adfgiloqqsstvwy|~���������������������������������������������#�����������������������������������������~|�{ywvsqoonligfda\YVROLJ�IJLLJIGILOQQOQRTWZ^�_�^_�a�_abba__�a_^ZY�WVTR�Q�RQ�OM�L�MJGEEDB?=�<?BE�GIJLORVWZ\\^_bfgiknqss�tvy|�~�������������������������������������������������������������������������������|{{y�wtq�o nkiggd^ZVROML�J�LJIILM�OQRTWZ�^_�bbddb_�a^\ZY�WVTTR�QRTT�VTRRQQOM�L�OMJ�GEDAA?�=�<?BE�GILORTWZ\^_adggiloq�s�tvw{�|~���������������������������������������������������������������������� ���������~||y�wvsq�o nlkifa\WTQOM�L�M LJJLLMMOQRVY\�^�_a�d�f�db�a�_^ZYWWT�R�QRTVWW�YWVTTRQMLM�OMJ�I#GEDDBA??==?BEGIIGGILORTWZ^_adgiiknoq�s�t�vw{�|~���������������������������������������������������������������������������������~|{ywwvts�q
onlid_ZWTRO�M�OM�LMOQRVY�\^_abbd�f�g�db�a_\ZYWTR�QRTWZZ�\ZYWTROMM�OMLJJIGGEGEDAA??ABEG�I�JMORVY\_abfillnooqs�t�vw{�|�������������������������������������������������������������������������������������~|{ywvvt�s
qonkgb^ZYVR�Q�O�QOMMLLMOQTWYZZ\^abdd�f�g�fdb�a_^\ZYVR�Q�RTVY\^�_\YVTRQ�O�QOMLJJ�IGEDBAABDEGIJLMMOQTW\_abfgkno�qst�v wy{||~����������������������������������$���������������������������������������������������������~|{{ywv�t
sqolida^ZWT�R�T�R QOMLLMORVW�Y\^ab�d�f�gi�gfd�b�a�_�^\ZWT�RTVWZ^_b�d�b_ZWVTR�QOMLJ�LJIGED�BDEGIJM�Q RVW\_bdgkloq�stvv�w y{{||���������������������������������������������������������������������������������~~|{yw�v
tsonkgda^ZW�V�WVTRQOMMOQTWYZYY\_a�b�dfgi�igfddfdba_�^\ZWV�TVWYZ^adgigfda\YWVT�RQMLL�MLJIGE�D�EGILORTTVWY\_bfilnoqstv�wy�{
|~||~�������������������������������������������������������������������������������|{�y wvsoonlida^\�Y�Z
WVTRRQQRTWY�Z\_a�ba�b�dfi�igfddffdb_�^\^^\YW�VWYZ^bfgkigda^ZYWVVTT�RMLL�M#LJIGEDDEGGIJMQTVVWYZ^_bgklnostvwyy{|�~��~�������������������������������������������������������������������������������~�|{wt�qolifba^\\^\\^^\ZYWVVTTVYZZ�\^_bddb�a�b�dfg�ig�f da__^\\^\ZYY�W Y\_bfgiigda^\Z�YWVTTRO�M�L"JIGEEGIJLMQTVWWYZ\_adgklnqtvwy{|~���������������������������������������������������������������������������������������������� ~|yvtsqqonkgfb�a�_ ^\\ZWWVWYZ�^�\^_bdd�abd�f�i�g�fda�_�^�\�Z�YZ^adg�igfa^^�\YWVTROO�MLMLJ�IJMOQTVWYYZ\^abfgkloqtw{|~�����������������������������������������������������������������������������������������������|ywts�qonligfd�ba__^ZYYZZ\_aa_^^_abdb�abdfggff�gfddbb�a_^�\�^�\
^abdgiiggfb�_^\ZYVRQQO�M�OM�LMQTVWYZ�\^_bfiiknqsty~���������� ��������������������������� �����������������������������������������������������������������|ywvs�tqolkg�f
baa_^\\^^_a�b�_abbdbaabddfggfd�f�g fddbdbba_\ZZ�\ ^_^^_bddfg�fdbaaba__^\ZWTRRQ�O�QO�MORVYZ�\�^$_abdgklnoqtw{�����������������������������������������������������������������������������������������������������|{y�w�ywvsol�kifdbba�_ab�d�b�d�fd�dfggf�da^ZYYZZ\^�_ab�d�b�db�a_^ZWVVR�Q�R�QTWZ\^�_abffgiloqqsv{~������������������������������������������������������������������������������������������������������~�|�~|ytqnnlligffddbaabb�db�ab�d�fb�b dfggfddfddba^Z�YZ\^�_�b�d�fd�f�d�b
a^ZYWVTRRTV�T�VY\^_�a�b,dgkklnqsttwy~���������������������������������������������������������������
��������������������������������������������������~yvsqoonlkiggfd�b�db�ab�db�bd�f
dba_^\ZYYZ\�^_�abdff�g�fdb_\ZYY�WY�WYZ\^_ab�d*fgiloqstvvwy|~��������������������������������������������������������������¾����������������� ��������������
������������������~{wvttsqonlkigf�dfdb�a�d�b�aba�b�f�dfggfda^\\�Z�YZ�\�^_adfgiigg�ikiigfa_�^�\�Z\^_aabdfggikloqtvwy{{|~���������������������������������������������������������������¾�������������������������������������������������������~|�{yvtsolkkg�f�d�f dbbaabddba__aa bdffddfggfb_\�ZYWWY�Z�\ ^_bfgiiggi�k�lkgd�b�dba__ab�dfgiklnoqtvw{|~~�������������������������������������������������������������������������������������������������������������������������~{wtqnllg�f�d�fdb�a�dba__aabdffdd�fb_^�Z�WY�Z \^adfgiggi�k�l<nlkgffggiigfdbdfgiikklnoqstwy|~�����������������������������������������������������������������������
����������������������������������������������������~{vsonli�g�fdb�a�b�ab�da^\ZZ\\ZY�WYZ\\�Z\^abdf�gi�kl�nlkiklnnlkigikln�oqstvwy|������������������������������������������ ���������������������������������%�����������������������������������������������������|wtqonkiigffgfgdb�abaa�b�b�da^ZYZ\\ZY�WYZ�\�Z\aabf�g�i�k
lnoqonlnoqq�o�n�qs�tvwy{|���������������� ���������������������������������
������������������������������������������������� ���������������������������~yvsqonlki�gfd�b�a�b�d�b�a�ba^ZYYZZY�WYZ�\�Z\_abf�gikklnqss�q�s�t�vw�y�{ |~�������������� ���������������������������������������������������������������������������������������������������������������������|yvs�olki�gfdbdd�a�b�ddb�a�_\Y�W�VWYZ\\�Z^_adfgffggiklns�tv�w�y{|�~���� ��������������������������� ��������������������������������������������������������������������������� ��������������������������~{wt�qolkiggff�d�b�d dbaaba_^^\ZYW�V�TVWYZZ�Y�Z\^_bd�f�g iklostvvwy�{�|~������� ���������������������������������������������������������������������������������������������������������������������������������������������|yt�sonkggff�db�dfddbd�b_^\ZZYWV�TVWYY�WZYZ\^abdfgiiklnosvwyy{�|�~�������������������������������������������������������������������������������������������������������������������������������������������������|yv�tsokig�f�df�gfdb�b�d�ba^\ZZYWV�T VWWVVWYYZ\^_adgikklnoqtwy{{|~||~��������������������� ������������������� ���������������������������� ������������������������������:�������������������������������������������������������~ywv�tokigff�g�i�gdb�b�d�ba\�Z�YWVTTRRTRRTVVTVVWWYZ\_adgk�lnqtvy{�|~|~��������������������������������������� ����������������������������
�������������������������������������������������������������!�������������������~{yyvttsnkiiggi�ki�gfd�ba_\�ZYVT�R�T�VWYZ\_bfik�losvwy{|�~�������������������������� ���������������������������������������������������������������������������������������¾������&�����������������������������~||{wtsqnk�ik�l�i�gfd�ba_^\�Z�\ZWVRRQQR�T�VWZ\^adgkkllnqsvyy{~���������������������������������������������������������� �������������������������������������������������������������������������������������~|yvsonl�k�l�kigfdd�ba_^\�Z�\ZYWVTRQQR�TVWY\^_bfikklnqstvy{|�����������������������������������������������������������������������������������������������������������������������¾��������������������������������� ~{wtqonllkklnn�lkligfddbdda_^\�Z5YWVTTRQQRTTVVTVWY^_abfgklloqtvwy|����������������������������������������������� ������������������������������������������������������������������������������������������������������� ~|yvsqonlkklnn�lkigf�d
ba_^\ZYWWVT�R�QRTVWWVVWZ^abbdfilnoqtwy{~�������������������� ������������������������ �����������������������������������������������������������������������������þ���� ���������������� ��������������~~{yttqolkklln�l�nlkigf�d ba__^ZWVTRQO�QRTWY�WYZ_bdbdfglnoqty{|����������������������������������������������������������������������������������������
�������������������������������� ��������½�� ����������������
������������� ��~~|{wvso�l�nlkigd�ba__^ZWTROMMOOQQRTVWYWWYZ\_b�d fgknosvy|�������������������������������������������� ���������������� ��������������������� ���������������������������������� ��������½����������������������������������~~||ywtolln�l�nligfb�a_\YWTQ�M&OQQRTVWYWWY\^_bfddfgknosvy|�������������������������������������������������
������������� ��������������������������������������������� �������������� ��������¾��)�����������������������������������~||{wtq�n�lkgfdba__aa^ZYWTQOOMMO�R
TVWYWWY\^_b�fgiknqtw{~�����������������������������������������������������������������"����������������������������������������������������������������������������������������~|{{wtqo�no�nlkkifd dba__aa^ZYWVRQ�OQ�RTW�YZ^_bfggiklnsw{~����������������������������������������������������������������������������������������������������������������������������������������������������������������������~|{{yvsqonoqqoqqonkigfd�dba�_^\YWVTRQQ�RTVY�Z\_bfgiklnoty~��������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������
��~||ywttqo�q�soligffd�da__�^\YVTTRRQ�RTVVYZZ\\ZZ\^bfgiklnoty~�������'������������������������������������������������������������������������������������������������������������������������������������������������������������������������~{ywvs�q�solig�ffda__�^\YVTTRRQQRTVWWYZ�\^adfgikloty~���������������������������������������������������������������������������������������������������������������������������)��������������������������������������������������~|ywtsqoq�sqligfgggda__�^\ZWTTR�QRTVWWYZ\\�^\^_bdfgiloty~������������
������������� ����������������������������������������������������������������
�����������������������������������%���������������������������������������������~{wvtqoq�sqnk�ggfbaa�_^\YVTRQQRTVVWYZ\�^�_abfgiloty������������������������������������������������������������� ����������������������������������������������������������������������¾���������������������������������� ��~|yvtqoq�sqnk�ggfdba__a_^ZWVTTRTTVWYZ\^_�^�_abdfilqw|������������������������������������������������������������� �������������������������������������������������������������������������¾�������������������������������������~|yvtsqqssqolig�f�fdb�a_^\Y�W�VWY\^^_a_�^�_abdfint{������������������������������ ���������������������������� ����������������������������� �������������������������������������������¾��������������������������������������~{wvt�sqnkigffdd�babba_^^\ZZYYWWYZ^_abba_�^�_abdfkov|������������*����������������������������������������������������������������������������������������������������������������������������������������������������������~����~{wvt�sqolkigffdb�a�ba_�^\�Z\^abddba�_�a�bdglqw~����������������������� ������������ ����������������������� ����������������������������������������������������������������!���������������������������������~�|~��~��~{ywvssqonlkkigffdb�a�b�a�_�^�\Z\^ad�f"da_aabbdfinsw~������������������������������������&����������������������������������������������������������������������������������������������������� ��������������������������������~�|�~�|�~|{ywtqnlk�ig�fdbaaba�_^\\�^�\^_adfggfb�abdfilqtw|������������������������������������������������������������������������������������������������������������������������������������ �������������������������������~|�{|~~|{{�|{ywtqlig�f�gfdb�a_�^�_\ZZ�^_abfgiigd�abdfknsvw|��������������������� ������������������������������������������������������������ ����������������������������������¾������������ ������������ ��������������������~|�{�|�{ywtokgf�dfggfdbba_�^\ZZ\^�_abdfgiigdbaabfgkotwy|������������������
����������������� ���������������������������������������������������������������������������������������
������������� ���������������������~~|{y�{yw�ywvsnigd�b�d�f�db_�^"\ZZ\^aabbddfgiigfdbabfilqvy{|���������������������������������������������������������������������������������������������������������������������������������������������
���������������������~{yyww�v�w
vtsoligdaab�d�db_�^�\^_bd�fgig�fdbdgknswy{|�������� �����������������������������������������������������������������������������������������������»���������������������������������������������~{wwv�t sqolifb__a�b�b_�^�_�^�\^_adg�i�g�f)dfgkosvy{~��������������������������������������������� ��������������������������������������������������� ������½���������������������������������������������~|{wvt�s�qonkgda�_a�ba�a_�^�_�^_abfi�kigg�f�giloqtw{~�����������������������������������������������������������������������������������������������������������������������������������������������������~~|{ywtsoqqsqqoonnlkifb_�^_�ba�_a_^\\^^__^^_adg�k�l�i�g�i�knoqtwy~������������������������������������������ ������������������������������������� ���������������������¾������������������������������������������������ �~|{{ywvsonno�qonkiggfda^\\^_abba�_^�\^_a__abfi�klnnl�k�lnoqsvwy|������������������������
����������������������������������������������������������
��������������������þ������������������������������ ������������������~#�����~|ywwvttolkklnoonlifddba_\ZZ\^_�a_�^�\�_a�bdfgikllnn�l�klnnoqstvwy|���������������������������������������������� ���������������������������������������������$����������������������������������������������������������~||~|�{|~~||{ywvvtsqnk�ik�lkgdba_^^\�Z\�^__^�\^__ad�fgik�l�klnnoqstvw{|~�������������������������������������������������������������������������������������#�������¾�������������������������������������������~|{yywywwvvwy�{ywvvtsqolifggik�ifba_^\\Z�YZ�\^^�\�^_bdf�gikk�l�k�iknnooqstw{|~��������������������������������������������������������������������������
���������������������������������������������������� ���������~|{w�v�t�stvwwv�tsqonkgdfgiigffda_^^\Z�YZ�\�\�^�\_bdfgikll�k�lkiiggil�noqsvy|~��������������������������������� ������������
��������������������������������
�����������������¾���������������������������������� ��������|{wvs�qo�q�oqssqoqqonlkgfdd�fdba_�^ZY�WY�Z�\�^_�\
_abfiklnlkk�igffdfgk�l�oqtvy|~���������������������������������������������������������������������������������
������������������������������������������������ ������|{ywtqon�l�n�lkgf�d�ba^�\Y�W�YZ�\^_^�\^_bgklnnlkigffdd�bdfikklnnoqsvy|�������������������������������������������������������������������������
���������������������������������� ��������������������������~{w�tolk�ig�i�g�igdb�a�_�^Z�YZWVVWW�Y�WY�Z\^_^\ZZ\_bgklnnlkgfddbbaabdfgi�k+lnosvy|��������������������������������������������������������������
���������������������������������þ������������������������������������� ������|yvs�olig�f�d�bd�f�gfdba_�^\ZYWW�VW�VWYZZY�W YZ\^_^\ZZ\_bgk�lkifdbb�abdfgikk�iknosvy~������������������������� �����������������������������������������������!������������������������������������%�����������������������|{wtqnlkkgfdbaa�_^__aab�dba_^^�Z�\YWVT�R�TWYZ\\ZYWW YZ\^^\\Z\\_afi�k�gfd�a:bdffikkggfgklosv{���������������������������������������������������������� ���������������������������������½�������������������'�����������������������|yvsolkigfdba_^^\�Z�\�Z
\^_aa_^\\ZZ�YWVRQ�OQRTWY�ZYWWYZ\^^�\�^_adgiig�fda�_abdfikigfddgknosw|���������������������������������������������������������� ����������������������������þ������������������(����������������������~{wtqnkgffdba_^^\ZY�WV�WZ\^\ZYWW�VTRQML�MOQRV�WWYZ\�^_abdfggf�db_^�\^_bfgifd�b dilnqw|������������������������������������������������������ ���������������������������������������������������~����������������~���~{vsolkgd�ba^�\ZWV�T�R�TWYYWVVTT�R�T�R QOLJLMMOQR�TVWW�WYZ^�_a�d�f�dba_^\�Z\^adffdbaabdgknsw~������������������������������������������ ������������������ �������������H������������������������������������~||{{|~�������������~||{||~~{wsokigda�_^\�ZYWTRQQ�OQR�T�R�QOQQR�Q OLJIJLMOQQ�RTVW�W
YZ\__abbdff�d�ba_^\�Z�YZ\_b�dbabdfiloty~��������������������������������������� �������������������� �������������&������������������������������������|{{�y
{|~����������~|{�y�{
yvqlgfda_^\�ZYWVVTROM�LMO�QOMM�O�QMJ�IJM�QRVW�WYZ\^_b�d�fd�ba_^^\�Z�YZ\^abddbbdfgknqvy~������������������������������������������������������� �������������&�����������������������������������~{yy�wy{|�������~~||{yw�y vsnida_\\Z�W YWVTRRQQML�JIJL�M�L MOOLIGGIJM�QRVW�W YZ\\_bddbdfd�ba_^\�ZYWWYZ\_b�dfgikoqtw|������������������������������������������������ ��������������������������������»������������������|yww�vwy|~��~|{yy�w�ywtokfa^ZYWVTTVVTRQO�ML�JIGGIJ�L�MLJIIJLMMLIGGILO�Q�RTVW�W YZ\\^abbab�d�ba^\ZZY�WYZ\_bd�fgikloqsv{~��������������������������������������������������������������������������½��������������������|ywv�t�stvwy{{�|{wvvtvw�y+wtnid_\YVTRQQRRQOMLJJLLJJIIGEEGIJJLLMMLIGGIJ�L�IJMOQRQQR�T�VVWYZ�\_aa_ab�dbaa^\YY�WYZ\_bfg�iknooqstw{|���������������������������������������������������� ����������������������������¾����������������������|ywvtts�qsttvw�ywt�stv�w vsngb_ZWTQ�O�MLJII�JI�G�EGIJLLMMLI�G
IJLLJJLLMOQ�RT�VVWYZ�\^�_a�ba_^\Y�WYZ\_dgi�k#loqqsttvw{~��������������������������� ���������������������������������������������*�������¾��������������������������|{wvttsq�o�q�st�vsqooqtvvtsokfa^YTQM�L�MLJJI�G�EGJLLMML�G�I�J�LMLLOQRRTV�W�VVWYZ�\�^_aabda_\Z�W�YZ\^adgk�ln�q,sttvwy|��������������������������������������������������������¾��������������� ����������������������������������~|yvttsqonn�oq�sqo�n qssonkgda\WROL�J�LJ�IGE�D�E�DEGEEG�J�LJ�G�I�J LMMLLMOQRV�W�V�WYZ\�^ _abdb_\YWWYZ�\ ^_bfikllnoqqst�vwy|������������������������������������������������������������ ������������� ���¾���������� ������������������~|{wttsqnllnlkl�n�lnonligdb_ZVQMLJIILLJIIGE�BDBDE�GIJ�I�G�I�JL�M�LMORTV�W�Y�Z\�^_abdb^\�YZ\�^_adgk�lnqstvvwwyy{~����������������������������������������������������������¾��������������� �������������� ������������������~|{yvtsqnlkkigi�k�lkifdba^YTQMLJIIJJ�IEB�ABDEGI�JI�G�I�JL�M�LMQRTVV�W�Y�Z\�^�_abba^\ZZ\\^^__abfi�lnqtvww�y{~����������������������� ���������������������������¾����������� ����������������!�������������������|{ywvsqlkggfdfg�i�g�igfdba^ZWRQLIIGGIGEGGDA�?BDEGJ�LI�G�EGIIGGJJLM�LOQR�VTVVWYWYZ�^_^^_abba^�\�^_abdgikl�noqtvw�y{~����������������������������������������������������������������������������������������������������������|ywwvsolifdbbdfg�igff�g fdba_\WTQOJG�EDBDDB?�=ADEGJ�LJIGGEEGIIGGIJLLJJ�LMORTT�RTV�WY\�^�_^\^_�a_�^�_!abdfggiknooqstvwyywwy{~���������������������������������������������������������������������������������������������~|wvvtsnlidbaabdg�i�fdba_^ZVQMLIGDBBA??AA?�<=?ADEIJLLJIEEDE�G�IJLMMLMM�Q�RTVWY\\�^_^�\^__�a_�abf�g ikloqsttvwyy�wy|������������������������������������������������������������������������������������������~|{wvtsqnlida_abdf�g�fdba_^\YTOLJIGDA?=<<==<�:<==?ADGIJJIGEDD�E�GIJMOO�M�OQ�RTVYZ\\^�_^�\�^_abb�d fgiiggiklost�vwyy�wy|�������������������������������������������������������������������
�������������������������~{yvtsqonkgda_aabbf�dfddba_^\ZWVROLJGEB?=�:�8�: <==??BDGIJIGG�D�E�GIGGIJMOO�MOQTRRTVYZ\^_�a^�\Z\abd�f�g�iklnqstv�w y|������������� ����������������
����������������������������������������
��������������������������~{wvtsqonkgdb�a�bdfdba_\ZYWTRQOMJEBA?<�8�78�:<=�? ABEGIIGGEDBD�EG�IJ�MOR�TVWZ\^_�a_�^\ZYZ_bf�gikk�i�klnqsttvwyywwywwy~���������������������� ������������������������������� ������������������� ����������������/�����~{wtsqonnkigfbaa__aabdfdba^ZYWVRQOOMJDA?=:8�7�578::<=�?�A�DEGEEDD�BEG�IJL�MOQRTTVV�WYZ\_�a�_^\ZWY^adggikllkiiklnost�vwy{yw�y{������������������� ����������������������� ������������ �������������������������������������~{wtsqonnlkigdba�_ab�dba^ZYVTQOMMLIDA=<:8�7�578:<�=�?�AB�D�B�ABDGIIJL�MOQQRTVW�WYZ^�_
^\ZYY\_bfgk�l�kloqsv�wy{{yy{|~����������������������������������������������� ������������������������������������� ������|ywtsq�olkigfba�_a�ba_^ZYVRQOLLJGDA<:87�5�4578:�<=�?�AB�ABEGIJLM�LMOOQRTV�W�VW\�^�_�^\�Z^_bfgikll�k�loqstvw�y�{|������������������������� ������������������������ ����������������������������������
������|ywts�qoliggfba�_^\YVRQOLJIGDA<8775544�2 4578::88:<�=�?�=?�ABDEIJ�L�JLMMOQRT�V�TVY�Z\^^�\�^_abdfgi�k lnnoqsstvy�{|~���������������������������������������������������������������������������������������������|ywt�s qoliggfdba__�^�_^\YVTROJIGEDB=:77554200//0245�78:<�:<::=�?=?BDGIJ�L�J�LMOQQ�TRTVWWYZ\\ZZ\^__�a,bddfikllnonooqsttwy{||~���������������������������
������������������������������������ �������������������������� �����������~|yvt�sqnlkgfddba__^^\\^�_^ZWVTQLIGEDB?<8755420/�-/02�4578877�8:�<=ADEEGJ�L�JLM�OQ�RTVW�Y�Z\^_aa__abbdfiln�oqsttvw{~���������������������������������������������������������������� ���������������������� ����������������~|{{wttsqqonlifdbba�_^�\^�_ \ZYWTOLIEBB?<8�7540/-,,--�/ 0255445778�:<?BDDEI�LMOOMOO�QR�VWYZ\^�_ ^__aabdgkl�o�q�s�tvw{~������������������������������������ ������������������������������������������������������~������������~|ywvttso�n
lifdba__aa_�\^�_�^\ZWTOJEBA=<:8::8520-�,�*,-0�2457�8:<=ABBDG�JLMM�L�M�LM�OQ�TVYZ\�^�_abfgknoqs�t�vwy|~��������������������������������������������������� ����������������������������������~���������~{wv�t qnlkllkgdba__�a�^_^�_ ^\ZWRLEB?=�<:852/-,**('%%''(*-�/0245�78:<=AABEIIJJLMOMLJLJ�I�J�LMO�RVYY�Z�\�^�_�adfglost�v�wy|~������������������������������������������������������� ������������������������������~���������~{wvttsolkiikkifb�a_�^�_�^\YTMGB?�=�<:740-*('%$""$$%'*�,�-/0455788:<?ABDEGIJLMOMLJIG�G�I�JLMQQRV�WYZ�\^_�abdfkot�v�w
y|�����������
���������������������������������������������������������������������������~~�|��������~{wtssqnlkigiigd�b�a�_^\\^\^�_�^\YTMGB?==?==<<:74/,'%$" � "%�(*,-0�4578:<=?�B
DGJLLMLJIGE�EGIIJLMOQT�VWYZ�\^_�abdfinst�v�w y|�����������������������������������������������������������������������������������~~||�{|������ ��~{wtsqonlki�gf�d
ba_^^\ZZ\\^�_^\ZWRLGBA�?=<:8740,(%$  $�'(*-0�4578:<=?�ABEI�JIGED�DE�I
JLMORTVVWYZ�\^_�abdfinqs�t
vwy|����������������������������������������������������������������
���������||�{|����� �~{wtsqnlkig�f�d�f
da^\\ZYYZZ\�^\ZWTOJIDA?A?=<752/-*'$"�"�%'(,/44�58:<=�?ABE�GEDA�ABDGIGIJLMOQTVWYZ\\^^_�abdgknoq�s tvwy|����������������������������������������������������������������������������|�{�|~������� �~{wvsqnligff�d fggfda^\\ZYY�Z(WTQMJIEBAA?=:52/,*('$ "%%$%'(*-24�5
8<=??==??AB�DBA?�?ABEGGIJLMMORVYZ\\^�_abbdfilno�qstvwy|��������������������������������������������������������������������������
������~��|{�y{�|~�����~ywvsqnli�f dfgigda^\Z�Y�Z�Y!ZYYVRQMJIEDBA?<840-*('%$ "�$%'(*/24558<=??=<==?�A?==�=/ADEEGJLMMORVYZ\\^__abddffillnoqqsvwy{����������������������������������
�����������������������������������������������~|{ywwy�{|~�����~|ywvtqoli�f�g�fgigda_\Z�Y�Z�YWVTRQMJGEDB?=:74/,*('%$ �"�$�%'(,/2458<=??=<<=??�=�?=<<�<?BDEGJLMOQRVYZ\^^_abdf�giklnoqstwy{~���������������� ���������������� ����������������������������������������������~�|{yyww�y�{|���~||{ywvtqoligff�g*fggfba_^ZYYWYYWWVTRQQOLIEEDB?:740-,(''%"�"$�% $%'*-0458<=??=�<=<<:::<<?BEGIJLMORRTWZ\^_bdfgg�i�klnoqtvy{~������������������ ������������������
����������������������������������������������~|{yy�w�y�w�y{~��� �|{yywvtqnkig�f�g�fda__^\ZY�WVTRQOMMLJGEEDA=852/-,('%$ �"$�%�$%(,/258<�=�<�:�<�::<?ADGIJLLMORRTWZ\^adfg�i�k�lnoqsvw{|�������������������� �����������������������������������������������������������~�{yvvttvwyy�wy{|��� �~{{ywwtsolkg�f�d%b__^\\ZYWWVTRQMLJLJGEEDB=<852/-,(%$"��"�$%(*-047:�<�:�<<=ABEGIL�M ORTVY\^_adfg�k�loqqsvy|~���������������������� ��������������� ������������������������������������������������{ ywvttsstvwwyy�wy{|~��~|{{ywvsonkifddffd�b&a_^\ZZYWWVRQQOLIIJIEDDB?<:852/-,(%" � �" $%'(*-/2578::�8:<<�:<==?ADEGIJM�OQRVY\^a�bdgk�lnqsstvy|~��������������������� ����������������������¾��������������������������������~|wv�wvs�q stvwy{yywyy{|�~�| {ywtqnkgfdbbdb�a�_&^\ZYYVTTRQOMJIGEGGEDBA<::8540/,(%" � $%'(*--/24�578:�<�:=?ABDGGIJMO�QRTWZ^_b�dfgklnllnosttvwy{|��������������������������������������������&������������������������������������~{ytssttsq�o�qstvy{{y�w�y{�| {ywtolifdbbaa�_�^\ZYWVTRQOMLIGEE�DBA=�:8542/,('$"��  "$%(*,,-/0�2458::<==�<?BDEGIIJLOQ�RTWY\_bd�fgikl�noqtvw�y{|����������������������������������������������������������������������������~|yvtonnoqoo�n�oqstwyy�wv�wy�{�y!wvtokgdbaba_^^\\^\\ZWVTTRQOLJGEEBB�A?=<�8 7540-*('$ �� "%'((*,-/0024588:<??�=ADGI�J LORTVTVYZ_bdff�g�i lnnoqsvvy{�|�~
�������������������������������������������������#������������������������������|ywtqol�k�lnoqqst�vwyyw�vtsokgdb�a_^\�ZYVT�RQMJG�DA�?=<:87�5 42/,('%" ��� "$%%'(*,-/025788:=�?BEIJ�L MORVWWY\^adfgg�i kloqsvwwy{~���~������������������������������������������������������������������������������~yvtqnli�g�ikllnnooq�s�t�vwvvttsqnigdaa__^\ZYY�W"VTQOQOLGDBAB?=<<=:875424420/,'%$" ��� "$$%'(*,-024788<=�?ABEGJL�M OQRWYY\_abdfik�l kiilqsvy{yy{~���~�����������������������������������������������������������������������~|wsqnkif�d�fgkl�no�q�s�t�vtsqnkigda_^\\ZYWW�V TROMMLIEBA??=<�:87420020//-*'%$""  �� �� "$%%'(*-024578<=�?ADGIJLM�O QRTWYZ^abbdfil�n liilqtw{||{|~���~�������������������������������������������������������������������~~|{yvqnkigbaab�dgilnn�o�q�s�t
sonkiifda^\�Y�W VTTRQOMLLIEDA?�<:8775420/-/-,,*('%$""� " � " �� �"�$%'(,/24557:<==?BEGIL�MOQQRTTWZ\_abddfil�nliiloty|~~||~����~������������������������������������������!���������������������~|{{ywvqnkgfda__a�bfil�no�q�oqssqqolkiigdb_\YW�V TRQMLJJIEBA=<�: 854200/-,,*(''�%$"� � ""  �"�$%'(,/2�5
78<==?BEGILMOOQRRTVY\^_abdfgkl�nlkkloty|�~�����~���������������������������������������������"���������������������~|{yywvsnkgdba_^^�_bfk�l�n�o�n�o nlkigfdba^YVTT�RTQQOMJIGEB?=:87�8 7420/-,,*('%�$%$$"  � "$"� "�$�%'(*-02�5
78<==?BEGIJMQQ�R TWYZ\^aabfiln�o
nkkloty{|~~���~��������� ���������������������������������������������������|{ywwvtqlifba_�^adgik�ln�o�n lkkigdba_\WTRR�Q�O MLIEDA?<:755�7 520/-,**('%$�"�$" � "$%$�"
$%%'(*,-/24�5
7:<==?BEGIJMQ�R TVYZZ\^aabfiln�o nllnqtwy{|~���~������������� ����������������������������������������������~|ywvvtqnkgdba_\Z\Z�\_adgikkilooqonnll�n lkigfba_\YVRQQ�O�MJIEB?<:8854455420/-,*('%%$" � �"� �"$%'%�$�"
$%'(,--/045�7
8:<==?BDEIJMQ�RTWZ\\^_�bdgklnoollnoqtvwy{~��||~���������� �������������������������������������������������|{wvtsqligda__^Z�Y�Z"\^_bfgiggknoqqonllnoonkgfdba^ZWTRQQ�OMJGDB?<8�74245420//-,('%$$" �� � "�$%'('�%�$ %'*-/02457�8
:<<=?ABDEIL MOQRTVY\^^_b�dfgilnnlnooqstvw{�~�|~��������� �������������������������� �����������������������|yvtsolifda�^\Y�W�YZ\^adfgffglnoqonll�n ligfba^\YVTRQ�O�MLGDB?<854454244200/-,*'%%$"" �  "$$%'(*(('�%
$%'*-045778�:�<=??ABDEIJ
MOQRTVZ^_ab�dfdffgk�l�o�qstv{�|�{|�~���~����~�����������������������������$����������������������|yvsolifba_^\\ZYWVV�WYZ^_ab�dfikl�n�l kigfb_\ZWVTTQ�O MLJIEBA=85�2�42�0/-,('%%$�" � �"�$%'(�*(�'�%(,/25�8:�<=?�ABEGIJ MOQRTWZ^_b�d�fgikln�o�qstvy�{�y�{|�~�|~���~ �����������������������������������������������|yvsnifda_^^\ZY�W�V W\^^_aabdfgi�k*igdb_\ZWVVTROOMLIGEB?=<85200224420//-,*'%$%�"  �"�$�%�'�( *,,*(('%'*-057�:�<=A�DGIJL OQRTWZ\^_b�d�f�gik�nossttvw�yw�y�{|�{|~~���~�� ������������������������������������������������|ytqlgdba_^^\ZY�WV�T VYZ\^__abdff�g�i�g�igdba^ZYWWVTQMLIGEDA=<<852�02�4 2/-,,*'%$$�" � �"$%'�(*�, *('(,0478:�<�=?BE�GIJMOQRTWZ�\^a�bdf�gikllnost�vw�yw�vw�y�{|�~���������������������������������������������|ytokgdba_^^\ZYWYWWT�R
TVWY\^^_bbd�bd�fd�gdb_^ZYYWVTQLJGEDB?=<<852�02�42/-,*('%$�"���� �"$%(*,�*�,�*,/258::�<=?ABDG�IJLQQRVWZ�\^_aadfg�igiillnost�v�w
vtssqssvvww�y�{�|���������������������������������������������~{wtokgdba_^^\ZY�YWVT�RTWZ\^_�a�_a�bdffdb_^\ZZYWTOLIEDBA?==<852002�4�20/-*(''$�" �� �"$%(,�-�,�-/02478�:�< =?ABDEGIJLMORTVYZ�\^_adgi�k�iklnoqstvv�w�v
tqonnooqstv�wy{|����������������������������������������~|{wtqlifba_^\ZYY�YWTR�QRTVYZ�^\^^�_adfdb_^^\\ZYTOLIEBA?=<=<87442�4�2�0 /,*('%$""� "$%'(-//-,--//�045588�:�< =?ABDEIJLOQRTWYZ\�^�\^_bfgi�k�i giknoqstvv�wvttqnlkkllnoqsttvwy{|������������������������������������������~|{wtqlifba_\ZYWWYWVTRQQOOQTTVWZ\\�Z�\�Z�\^_bddba�_ ^\YTOLIEBA?=�<:8775544�2
/,*('%$"� �" $%((*-//--//02�4578�:�< =?ABDEIJMQRTVYZ\\^__^�\^adgi�ki�gilnoqst�vtsqnkiggiiklnoqsvwy{|~���������������������������������~{wtqlifda_\ZYWW WVVTRQQOOQTVWW�Y�Z
YWWYZZ\^abb�a _\YTOJGDBA?=�<�:8755�4
2/-,('$"� "$$%',*,-/0//0247�8788:<<::<�= ?ABDEGIMQRTVY�\^__^�\_bdgkllkigffggiknoqs�tsoligfddffgiklnqtwy{|~����������������������������������������|ytoligfa_\ZYWWVTTR�Q�OQRV�W�YW�VWYYZ^�_�a_\YTOJGDBA?==<<::<<:8�7 5420-*(%$ � "$%%'*�-/0�2458:<==�<�=�<=�? ABDEEGILORTVY�\�^�\ ^abdgkllkigff�gilnoq�sqolifd�bdfgilosvy{{|����������������������������������������|ytolkigb_^\ZYWTRQOO�MQRT�VW�V�TVWYZ�\^_a_^\ZWTOLIEBA?==<<::�<�8�:�8 7520-,*'%" �"$%''*--//0224458:<=?A�?�=�?ABDE�GILOQTWY�\Z�\ ^aabfkllkiifd�fgkkln�onlifb�a�b�d filotwyy{~�����������������������������������~{wtonkiida^\ZYVTQOMM�LMOQ�RT�VT�RTVWY�Z\^^\ZYWVTQOLGDA?�=<::<<�:�<�: 850/-,*('%$$�%�'(*-//02�457:<<=A�B�ABDG�IJMOQTWY�Z�Y�Z\^__adi�kif�df�gi�kigfda�_a�bdgilqtvwy{|~��������������������������������~~|ytsqnkiifb_^ZYVRQOM�L�M�O�QRTTR�QRTW�Y�W
VTRRQOLIEB?�=<::�<�:�=&<=:50/-,*(''%%''((**,/00224575578:<=?BD�EDBBDEEIJJLJJMOQTVW�Y WVVWYZ\\^^_bgi�kg�d�f�d�gfdbaa_^\\^abbdbdfgknqqstwy{~�����������������������������������~��~|{yvsqqnkiifba_\YVRQOM�L�MO�Q�O�QRTW�YWVV�TR�Q OLJGDA??==�<�=�<=�?<720/-,*�(�*,-0�2�4 578778::<?BDEG�IGEEGIIJLMMLLMOQRTV�V�TVWYZZ\^_adgkkifbbdd�b�a�b a_^^\\ZZ\_ab�d fgilnnoqtvy|�~�����������������������������~|�{�|{yvtsqolkigdba_\YVQOMM�L�MLM�O�M�OQRTVW�V�T�R�Q�OQOLJIEB�A?==�?�=?�A=8520/-,,�*�,-024424457:8:<==?BDEGI�L�JIGGIJLM�O�MQRRQRRTTRRTVWYZ\^^_bdggfbaaba�_�^\�^\Z�YZ\^^abddfggiklnosvw{{||�{�|�~���������� ����������~��~�����|{�y�{ywtsqqoliigdb_^\YVQO�M�LM�O�MOQR�T RQOOMMOOMLJIGE�DBA�?A�BA?<8540�/�-�,-/2455�4 57:<=?AABDEEGJ�MLJ�IJM�Q�OQRQOOQRRQQRTVWZ\^^_abddba�_^�\Z�Y�ZYWVVWYZ�\^_bdf�g
iknosvwyy{{�y�{|~��~~�� �����������~~�|~��~~|{y�w�ywvtqoonk�gda^\ZWT�OMOOMLL�JM�O�M�L�MOQ�R�T�R QOMLLMMLJI�GEBA�?A�BA?<872�0�/�-/24577�578:=AB�D�EGJM�OMLJIIJMO�Q�O�QOMM�O�QRVWZ^^__�a�_�^Z�YWV�W�V�TVWZ�\^adfg�i klnstvwwyy�wy{~~�|�{|~�������~|�{�y|~~||{yww�vtsonkg�fb_\ZYVR�OMLJIIJMOO�M�L�MOQ�R�T�RQOM�LJI�G�IGEDA?�=?A�BA=:854�20/045�78:<?BD�E�G IJMOQQOMLJJLO�QO�M�O�M�M�OQTVY\�_^\Y�WVTTVVT�RTWZ�\^_bfgi�klnqstv�w�v�tvwy{{�y�wy{~�����~|{�y�wy�{y�wvtst�vtqlifddb_\ZYVRQQ�OMJIGIJ�M�LJLLMLLMM�O�QOMLJ�I�G�JIEDBA?�=?A�BA?<:7544�5�24788�78:<=ADEG�IJLMOQQ�OMLMO�QOMLMOOM�L�L�M�OQRVVYZ�_\ZYWWVT�R�QRTWZ\\^\^^adfgikklnooqsvvts�t�v�t vw{|{||~||{{�w�v�w�vwttsttvvtqlgdba_^ZYVRQOQO�MLIGGIJ�LJIIJLMM�LM�O�QOMJIGGIJJIIJJIGDBA??�=?A�BA?<:88�7�5 788778:<=ADEGI�JLM�O�Q�O�Q OMLMOOMLLJ JLMMOQRVWWYZ^_�a�_ ^\ZYYWVTRQOOQQ�ORVYZ\\�^_bdfgikl�noqssqqs�ts�qstvwwvvw�ywvvtt�st�v�t qlgda_^\YVRQOOOM�LJI�G�I�J IGGILMMLLJLLM�O�M OQQOMLIGEGGI�JIEDB?�=?BDD�BA?=<�:87788:877�8:<?ADEGI�J�LM�O�Q�O�MLMOOMLLJ�J LMORTWYYZ\^_�a_^^�ZYWRQOMM�ORVY�\ ^\\^_abdgikkl�n�oqstt�so�noq�sqstvv�wvtsqq�oq�ts�t�s
okgda^\YWRQ�OMLLJJII�G�I�GIJLMML�JLO�Q�OQRQOMJGEE�GIJJIGDBA=�<=??ADEED�BA?�=<:88:<=<:�8:<=?BDEGI�J�LM�O�QOMM�L�M�LJ�JLMQRVY�Z\^�_
^\\ZZ\\ZWRO�M�ORVY�\ ^_abdgikkl�noqss�qonl�kln�o�noqss�tsqo�nos�t�s�t sqolifb_\YVTQ�O�MLJ�I�G�ILMLJJ�L OQRRQQRRQOMJG�E�I�EDBA=�<=??AEGGE�DB�A�?=�<=??=�<�=�A�DEGIJL�J�L�MOMOQQOML�J�L�J�JLMQRVY\�Z\�^
\ZYYZ\\YVRO�MO�QTWY�Z�\ ^_bdfgikll�n�l�noqqonnkk�i�k�l�kln�o�n�l�k�lnqstvssttqonkgb_\YVRQ�MO�MLJ�I�G�ILMLJL�MOR�TRQOMJG�E�GE�DBA?�=?AABE�GE�DBA�?�A�?�A�B�D�EGJLLJJ�L�JL�M�OMLJ�I�JI�GI�J LMQRVY\ZYY�Z�\ZYWYZ\ZWTRQOMOQ�RTVW�Y Z\^^_adfggil�n�l noonnoonki�g�i�g�iklnl�k�iklnostvt�s olkgd_\YVROM�LM�L�JI�G�E�G�ILMLJLMOOQTVWWVTRQOMJIGEE�D�BDBA??�ABDGG�IGEGGEDD�B�A�B�DEDEEGILL�J�IJ�L�MLJ�IJGG�EG
IJLMQRWZ\ZY�W YZZ\YWVYZZYVRQ�OQ�RTVW�Y�Z�^abdfiikn�o nllnnonnlnlif�d�figg�fgiki�g�i�giknos�t sqqnkgd_\YVRQM�L�JL�IG�E�G�IJLMMLLMOQRVWYYWVTRQMLJIGED�B�D�B�DBAA�BDEGG�I�GED�B�DE�G�E�GIJ�L�J�IJ�LJ�IE�DEGIJLMORW�ZYWVVWYZZYWVWYYWVRQ�O�Q�R�TVWY�Z \^abdfikln�on�l�n lkkigdbabdfggf�df�g�f�dfggffgilo�s qonkgda\YVRQOM�LJII�E�D�E�G�IJLMMLMQRTVWYZYWVTROMLJIGD�B�D�B�A�BD�GI�JGEDDBBDEEGGIIGGEE�GIJ�L�JIGIIJ�L JIGGIIGDBABBEG�IJMOQV�YWVTVWWY�W�VTQQ�OQRRT�V WYYZ\^aabfikl�n�l�k�igfdb�abdffd�b�dfdd�bd�fgikn�qonlkgd_^YWTQOML�JIGD�BD�GIJJIIJLMMOQRTVWYZZYWWVROMMLIE�D�BDGII�GIJ�L�MLIGEEDDE�G�IGEG�IJ�L�JIGIJ�LJI�GEBA?ABEG�I JLMORVWWVTTV�W�V�TR�QO�MOQRT�V WYZ\^__adgikll�k�l�kigffgfdbb�ab�d�b�d!ba__abbaabddfgilnonligfb_\ZWVRQMLJ�IGEB�ABDGII�JIJJLJIJLMOOQRTVWYZZYWYWVRQQMJGE�DEG�IJLL�M�QOMJIGGEDEIIGIJJIIGIJ�IJ�LJIJIGJ�L�MLJJIGGEDBA??ABDGIJJLLMOR�T�RT�V�T�R�QMLJJLOQRTTVVWYZ\�^_afggik�igf�bdbbaa__aa�d�a�b�a�_^�_�abdgilnlidba^ZYWVTROLI�GED�?ABDGIJ�L�J�L�JLM�OQRTVWYYWWYYWVTROLIGEDD�E�GI�JLMOQQRRQOLJIIGEG�I�J�I�J�LJ�IJ�L�ML�JIGDBA�?ABDGI�JLMO�QRTVVT�R�QOLJIIJMOQQRTVWYZ�\^_bddf�g�fda�_�a�_ab�db�a�_�^�_abfgikifa_^ZWVTTRQMJG�EDBA�<�=?ABEGJ�L�J�L�JLMMOQRT�V�W�Y�W
VTRMJIGEEGG�E�GIJL�MOQ�T�RMLJJIGII�J�IJLLJIJJLJ�I�JLMML�JIDBA�?ABDE�GIGIJLLMLMMOORTVVTRQRQ�M LIIGIJLMOQ�RVWY�Z\^_�abddbaab_�^\^^_�^�_a�ba�_�^\^_^�\^�_ab�fgfd_\YVTRQROMJGEDBBDA=< 8:<<=?ABDEIJ�L�J�L�JLMOQR�TV�W VTQMJIGGII�GIJLMO�QRT�V�TQMLL�J�IJLLJ�I�JI�G�IJLL�J
IEDBA??ABDD�D�EG�I�JLMQR�TRQQOL�JI�GIJLMOQRQQRTWYZZ\^__�^_aa_�^�\�Z\�^�_�^\Z\^^�\^_�abdd�ba^YVRQ�OMJGEDB�A=:8 58:<?AABBDIJ�L�J�L MJJIIJMOQR�T�W�V�WVROLJJIJ�ILOQQRR�T�V�W�VTROMML�J�I�J�LJI�G�EG�IGEDA�?ABBBD�E�DEGGIJMQRRQQOOLJI�G�E�GJLLMOOQOQQRVWYYZ\^^�\�^\�Z�Y�Z�\^a_�^�_�^�\�ZYZ\\ZZ\^�_�a�ba_^\ZVROM�LIEDA�?=:7557:=A�BDGI�JLMLJIGILMOQRTTVV�T
VWWVTQOMMLL�JLOR�T�VW�Y�WVTRQOM�L�JLJJLMML�JIG�E�DE�GEDA?�=?AB�DB�ABDDEGJMOO�M LJIGEEDBDGIJ�L�M�O�QRTW�YZ�\�ZY�W�VW�YZ\_a_�^�\^__^^\Z�YZ^__^^�_^\ZYWTQML�JIEB?�=<875 78:=ABBABDEG�IJ�LJ�G�J�MORRTRQRRV�WVRRQQMMLMLLMRTVWVW�Y�Z�\�Z�WTRQO�M�LMLL�MLJ�IGDDEDD�BDE�G�EBA?=�<=??�A?�=�?ABDGI�J
IGGEDBBDGII�JLMQOQRV�Y�Z�Y�WYW�VT�V�WYZ_a^\\^�\�^\^\YWWYY�WYZ\^�\ZYYWWVRMJ�I�GDA?�=:878:<?�A�BDE�GI�JI�G�I�JLOQQOOQRV�WV�T RQOOQOOQTVWYY�Z�\�^�\ZYVTR�Q�O�M
LJIGGEDDEED�BD�E�DB?=<<�:<=�= <::<=<<=?ABD�E�GEDBBDEGG�IJLOOQRVY�ZYWW�V�WV�T�V�WYZ^_^\\^^�\ZYWWYW�VWY�Z�YW�VTQLI�G EDBA?==??=<::<=�A?AB�D�E�G IJMOOMMOQTVWW�VT�R�TVWYZ�\�Z�\^�_�^�\YWVVTTRT�RQ�O LJIEEDBBEE�B�A�B�D�B
A?<:8878:<==<<:877:<�:<=?�ABDEEGED�BDEEI�GIJJMMQRVY�ZYWVV�T�V�T�VWZ�^\^^�\ZYWWVWV�TRTVWW�VT�RMJG�EDBAA�?�A?<�=?�A?�=�?AB�D�E�G�E
GJLMMLLMOQT�V�W�VW�YZ\^^�\^_abba_^^\\ZZYYWWVV�TRQ�OMLIED�B�D�BA??==?AA�?=<87�578:<<:87�57�8�78:<�=?ABD�ED�BDE�GIJJLMQTVW�YWVV�T�V�T�VWZ\\^^�\�^�\ZYWVVTTRR�QR�T�RQ�OLIE�DB�A�BA?A?A??A??�<:�<?�A?ADDEGGDDEJJLLJLMOOQTTVW�Y�W�YZ�\�^_abddba_�^\^�ZYWVTTRQQ�OMLIGD�BA?<<:8:�<�=:855�4�578875�2�54578::<=??ABDEED�B�D�EG�I
LOQTTVWYYWV�TV�RTVVWWY�Z�\Z\^^\ZYWWVTRQOO�MOQQ�R�QO�LJGDBB�A�BDBBBAA�?=<�:�8:�< =ABDEEDDEI�JLM�O QRTWYZZYYZ\^^�_�^_�abdffdba�_�^\YVTR�QO�MLIGEDDBAABBA?<:8755778::8544�245540�/�0244224�7:�=?ADEED�BDE�GILOQRRTV�WV�T�RTVWYYZZ�Y�Z\^^\Y�WVRQOMLJJL�OQ�RQOML�JIGDBA??�ABDD�B�D�BA?=<:�8�7�5�78:=?ABDBBEGIIJL�M OQRVWZ\\Z\^_�a�_abddf�gfdba__�a^ZWTRQOO�MLIE�DB?�A=<:85420224575400/00�/00/-,�-,--/022024458::<<=?BDEEDDBBDD�EGLMOOQRTT�V�T�R�T�RTVWY�Z�W�YZ�\ZY�W TQOMLJIIJMMO�QOLJIGII�G
DB??=?AADEE�B�D�BA?<:8�7�542024457:<=?AABDEGIJL�MORTWZ\�^_a�b�abdfg�igfdbb�a
bddb_\YVRQO�MJGD�BA�?=<:8740/�-/0�2/�-�,--,**�,�*,-/�025788:<=?ABDEEDBB�DEGJJLMQ�RT�VT�R�T�RTVWYZZY�W�YZ�\ ZYWWVROMMJ�IJLM�OMLIGEEGG�E DA??==?ADEED�B�BA?=:87�5420�/02478<==?BBDEGIJ�M QTVWZ\__abbdbb�d�bdffg�i�g�dbd�bdffda_\WTROMMOMMIEB�A?=�<:8740/-,**,-//0/,,�**(''�(�*�,�-/045778:<?ABDEDBAB�D�G�IJLO�R�VTRR�T�QRVW�Y�W�YZ�\ ZYWVTQMLLJ�I JLMMLLJIEDDB�D BA?=?<<=ABDEE�DBA?=<:875�42/�-�,-/047:<<=AABDGGIL�M ORVWYZ^_ab�dfggffg�igff�d�f�d�fdba^ZWTQ�OMLIEB�?=<�:852/-,�*,�-,*�(('�%�'(�*,/025�7
8:=ABDDBAAB�DE�IJLMQ�R�T�R�TRQ�O�QRV�W�YZ\^\ZYWVTQMLLJJ�I JLJIGGEDBB�A?�=�<=?ABD�E�D?=<<:8754�2/�,�*,-/04788:=?BEGGIJ�MORVYZ^_ab�d�fgiklkk�lkigffd�fgfdd�fda^\YVQOOMMJIEB?==<:88::840-,�*�(�*�(�' %$""$$%'(*�(*-0245778:<?ABB�A�BDG�I�JLM�Q�RQ�RQ�OQRRTV�TV�WZYZ\^\ZYWVTQOMMJJIJ�IGDDB�A�?�=�< =?ABEEDDBA<�:8544�2/,�*,-/04578<?BEGGIJM�OQRVY\_ab�dfgikln�o�nlig�f�g�f"da^\ZWROMLLJIEB?=<::88::72/-,**,,*(�'�('�% $" ""$'((''�( *-/024578::<?�A�BDG�I�JLMOO�Q�OQR�T�RTVWY�Z�\ ZYWVTRQQOL�JI�GEBA�?=<::�<�=?BDDBBA=:88::85442200-*�(%*,-/04458<?BDDGJLOQOOQRWYZ^_adffgilnno�q�onlii�g�i�g�fb_\\YTQMLJIIDA?=<::�850-,�*�,*'�%�'%�"� "%�'�(*�-/045788:<�?A�BDE�GI�JLMLMMO�Q�OM�OQR�TR�QRTWY�Z�\ YWWVTRQQOM�J�I�GDBA==�<�:�<�=?ABBAA=<:88::85�420/,(�'(*,-/24458<?AABEJMO�Q RTWWYZ^_bfgikn�o�q�onlkk�i�k�ig�fda^\YTQMLJIGDA?=�<:87540-�*('�%�$�%$" � $%'(''(*,-,,-/025778:==?B�D�EGI�JLM�O�M�O�QR�TR�QRTWYY�ZY�WVTRQOMLJ�IGDBA=<�:�<�=?�A?=<:�7�875440/-,(�'&(,,-022478<=AABDILOQRRTTVVWY\^afgiloqqo�q�onlkk�i�k�ig�f!db_\YTOLJIGEDA?==<<87542/-,*,,*(('�%�"�$"  $%�'(*,,*,--//24578:<?B�D�B�DEGIIGGIIJLMLLJLMOQRRTVTTR�Q�RVWW�Y�WVTROMLJIIJJIGDDA=:�8�:�<
=??AA?=<::8 �������������������������������������������(�����������������~|{yvttvtsqnkifdba^\ZYWW�VWYZY�W�VW�YZ\^_�a�b�abddb_\YW�VTOJGEDB�A?=<=ADEIMTY\_bfinsv{������������������������������������������������������������������� ����������������������������������������������������������������|{yv�t solkifdba_^Z�YWVWYZ\ZYWWVVWYYZ\^�_a�b�aba bababbddb_\Y�WVROJGDBB�A?�=?BEJOTW\_bfkosw~������������������������������������������������������������������������ ����������������������������������������������������������������~|{wvttsqn�kgdbaa_\�ZYWYZ�\ZY�WYZZ\^_�abddbaabbb�a�ba_\ZYYWTQOLGDBB�A�?BGLORVZ^afkot{�������������������������������������������� �����������������������������������
������������������� ���������������������,���������������������������|{ywvtqnlikkgdbaa_�\ZYZ�\�YZ\\^_�abdffbaabbb�a�_ ^\ZYVRQMLIEDD�BA??�ADGLQRVY\_dkov~���������������)������������������������������������������������������������������������������������������������������� ���������������������~|{ywtolk�igdbba_�^\ZZ�\�Z\�^_aabd�fd�b�ba__aa__^\ZYVRQMLJIG�EDBAABDDEILQTWY\_dkqy��������������������������������������������������������������������������������������������������������������������������������������~|{wtoli�g�da�_^\ZZ\�Z�\�Z\^^__abd�f�db�ba�_^\ZYYWTROMLJIIGGEED�EGIJLORVY\_dls{��������������������������������������������������������������������������������� �����������������
����������������������� �����������������������~{wtolig�fbaaba_\�Z�YZ\\�Z\^_abd�fd�dba�_^\Z�Y WTRQOMLLJJ�IJIIJLLMORVY\_fnt{������������������������� ����������������������������������������������������������������� ������������������������"�������������������������|wtoligfdd�fdbbdba^�Z�YZ�\�Z\^_bdfg�f�g�fdba�_^\Z�YWVTRQO�M�LMO�MOQTWZ^agot{~��������������������������������������������������������������������������������������������������������������������������������������|ytqnkgfdd�fdb_\�Z\^^�\^_bf�gi�kigfdb�a_\�ZYWVTR�Q�OQRRQOOQRTWY\_bioty~���������������������������������������������������������������� �����������������������
����������������������%�����������������|ytqnkifddfddfgiifb_\�Z�\^_�^�_bf�g�ik�lkigf�d�ba^�\0ZYWWVTRRQRTTRRQQRVWYZ^afkoty~�����������������������������������������������������������������
������������� ������������������������������������������������������|yvsolkg�f�dfikkgda^�\�^�_�abdfgikl�nlki�g�fdba�_ ^\ZZYWVTTVVT�RTWZ\^_diloty~������������������������������������������������������������� ������������������������� �������������������+�����������������������{wvtqnkigffdfgkllkfb_�^�_^�_
abbabdfgkln�o�nlkkikk�igfd�ba_^^\ZY�WV�T�VY\_bbgknqvy~������������������������������������������������������������� ���������������������������������������������������������������~{wvtsolkigffgik�lida�_�a bddbbdfilnoqq�on�l�n�l�kig�fdbaa_^\\Z�Y�W�YZ^bfgilotw{~����������������������������������������������������������� �������������������������������������"������������������������|{wvttqnlki�gik�lkfbaa�_abb�f�d fgknoqssooqqq�o�q�o�nlk�igffdbaa^�\ZYYZZ\_dgiknqwy|��������������������������������������������������������������������������������������������
�������������������������������������� ~|{wvttsonlk�ik�l kgdbbaa__abdf�g
ilnoqssqqst�t�stvvttsqo�n�l kigfdba__^\\�^adgkloty|����������������������������������������������������
�������������������������������������������������������������������������~ |{{ywvvtsonl�k�l�kigfdb�a
bfggiikiikn�oq�stv�v�ywvtsttssqqonligfdbba__�adfilosw{������������������� ������������������������������� ���������������������������������������������������������������������~|�{ywvvtqo�nl�kigd�b
dfggiklkkln�oqstvww�w�y{�|{�y�w
vtsqolkigff�dfgilosvy|����������������������� �������������������������������������������������������������������������������������������������~|�{ywvvtsqooqqonnl�klkkg�d�fgikllkkln�oqtvy{{�{|~~���~�|{yvtqonlk�g ilnoqtw{~������������������������������������������������������������������������������������������������������������� ����������~|�{ywvttssqqssqonn�lkg�f�gikll�k lnqqsvy|~~�~��������~|yvsqonl�k lnqsstvy|������������������������ ���������������������������������������������� ������������"������������������������������������������������������~||{ywvttssqqttqo�nlkgig�i�k lnqqtw|�������������������~{wvsqo�n�o qstwvwy|~��������������������������������������������������������������������������������������
������������� ����������������������������������~|{wvtt�s�tsq�onlkk�i�gik�lnqsv{����������������|{yvts�qs�t
vwy{{|~��������������������������������������������������� ����������������������������������������������������������������������������������������|{yyw�v�t�s�qoqqonlki�gf�g illnoqtw|�������������������~{ywv�tvwwy{|~�����������������������������������������������������������������������������������������������������������������������������������������������~�|{yy{yw�vts�qonkig�f�g ilnoqsv{�����������������������~|{�y�{|~�������������������������� �����������������������������������������������������������������������������������������������������������~�|{ywv�wvts�qonki�g iklnosv{~���������������������������~����������������������������������������������������������������������������������������������������������������������������������� ������������������~|{yww�ywvt�sqolk�i klnoqty~�����������������������������������������������������������������������������������������������������������������������
����������������������������� ���������������~|ywwyy{ywvv�tqnlkik�l nqqsv{~���������������������������������������������������������������������������������������������������������������������������������������������������������������������~{ywwy{yw�v�wtqnlkloqooqttvy|~�����������������������������������������������
���������������������������������������������������������������������������������������������������������������������������������~|{�wywvtvw�yvsqooqtvttvwy{{~��������������� �����������������������������������������������������������������������������~�������������������������������������� ������������������������������������������������������������~|y�wvttvwy{{yvtstvw�y {|~~�������������������������������������������������������������������������������~~�|
~�������������������� ���������������������������������������� ��������������������������������������|~~|y�w vttwwy|~|y�wy�{�~���������� ����������������������������������������������������������������������������~~||{|~����������������������� ������������������������������������������� ����������������������������������~�|{y�w vtvyy{~�~|�{�|�{|����������� ����������������������������������������������������������������� ������~~||{{|�~�����������������������������������������������������������~���������������������������������
����|{{||{w�v�y|����~�|~||~���������� ������������������������������������������������� �����������������������������~~||{{�| ~���������������������������������������������������~|{{||~���������������� ������������
���~|{{||{w�v�wy{~������~�~~�����������
����������������������������������������������
������������������������������~~�|~������������������������������������������������~|{yy{|~~������������������������������~|�{|{ywv�wy{|~~������������������������������� �������������������������������������������������������� ��������������~ |{{|~������������������������������������������~{�y{|�~�����������������������������~|�{y�w�y{|�~�������� ������������������������������������������� ������������������������������� ��������������~ |{{|~��������������������������������������� �����~{ywy{|�~ �������������������������������~|{yywvww{{||~~������������ �������������������������������������� ���������������������������������������
��������~~|�{|~��������������������������� ���������������~��~�|{ywy{|�~�������������������������������~{ywvvwy{|�~����������������������������������������������������������������������������������������~|{{|~~������������������������ ������������������~�|�~|{y{yywy{|~~�~|~����������������������
���~{ywvvy{�|�~�����������������������������������������������������������������������������������������������������~||~������������������������������� �������������|�{�|{y�wy{~�� ~||~�������������������������~|{{ywwy{|{{|~~||~�����������������������������������������������������������������
��������������������������������~����������������������������� ���������~��|{�y�{ wvvttvww{~��~�|~����������������������~|�{�y�{y{||{|~~����������������������������������������������������������������
��������������� �������������������������������������������������������~|{y�w vttsstvw{~��~�|~��������������������~{�y�{yww�y�{|�~��������������������������������
������������������������� �������������������������������������������������������������������������~�~||{yyw�v�t�s�tw{�~|�{|�������������� ��������|{�y�wy�{�|~����������������������������������������������������������������������������������� ����������������������������������������������~|{y�wv�tsqqs�tw{�|{�y{|�����������������������~|{ywwvtt�v�wy�{|���������������������������������� �����������������������������������������������������
������������������������������������������������~
|{yvtvvtssq�oq�tvwyy{{yww�y{|����������������������~|ywvtsqq�tvwy�{|���������������������������������������������������������������
��������������� ������������ �����������������������������������������������~|{ywt�sqo�noq�st�vwyy�w�y{|~���~����������������~{wvsq�o�qstvy�{ |~������������������������������ ����������������������������������������������������������� ����������������������������������������������~~�|{ywvqoo�n lkklnoqsstvvw�v�w�y�wy{{||{y{|�~�|~�����������|ytsqo�n�oqsv�y{~����������������������� ����������������������� ���������������������������������������������������������������������������������������~|{{�ywvsolk�iklnoqstvv�w�vwyy�w�ywvwy{||�{|����������~{vsqo�noqsvwyy{~�������������������
�����������������������������������������������������������������������������������������������������~�|�� ~|ywvwwvtoligf�dfgikkloqsttvwwvtv�w�y�wv�tvw{ywyy{~��������~|wtqqn�l�noqtvyy|����������������������������������������������������������������������������������������������������������������������������������������|{yy�{|�~ |{wttvtsqnkgdb�abf�g
ilnoqstvvtt�vw�y�wvt�stvwvvwy{|�������~|yvsqqnl�klnnoqtvy{~��������������������
����������������������������� ��������������
��������������� ����������������������������������������������� �~{yywywwy�{ywtqqsqonlifb__�a�d fgilnoosttss�tvwyw�vs�qststvwy{~����~||yvt�qnl�k�lnqtvy|����������������������� ����������������������������� ���������������� ���������������������������������������������������������������������~|{yyww�v�wvtq�onlkgda__�abdfgklnno�q�svwwv�tsq�o�qstvw{|~���|{yvts�qn�l�klnqtw{����������������������� ����������������������������������������������������������������������������������������������������������
���~|{ywywv�s�q onllnkigfbba�_�^_bffiikll�n�qt�v�tsqo�no�q stv{{||~~{wvts�qonll�klnqvy|������������������������ ������������������������������������������������������������������ ������������ ���������������������������~|y�wvsqqoo�nl�kigfd�b a_^^\\^adfggi�klooqt�vtqo�no�qsvy�{yvtssqq�onl�klnosw{~��������������������� ������������ �������������������������������������������������������������������������������������������� ���|{wvwvt�onl�kikk�gfdb�a_^\�Z^adff�g�iklooqt�vtso�n�l�noqqsstw�y�w tsqqoonnon�klnoqtw{~����������������������� ���������������� ������������ ���������������������������������������������������������������������������� ��~|{wvvtq�nlkiigffgf�dba_^^__^Z�YZ^abd�fgikloqst�v tqoonllnnoqs�tv�wvtsqoo�nl�k
lnqqsvy|������������������������������� ������������ ���������������������������������������������������������������������������~||{yvtsollkigffddbdbbaa__^�\�^\Y�WY\^_adfdfgkloqstvv�wvsonlkklnoqsttsttvvtsqoonnllnnl�k
lnqstw{~�������������������������������� ��������������������������������������������������������������������������������������������~|�{ yvsqnlkigfddbb�a_^\\�Z�\�Z YWVWYZ\\^a�dfilnoqstv�w vsonlkklnoqstt�s�tsqo�n�l�k
lostvy|������
������������������������������������������������������������������������� ������������������������������������������|{�y
wtqolkigfdb�a�_^\�ZYZZYYW�VWYZZ\^aabfiklnoqst�v
sonlkklnoqq�s�q�o�nl�k�i�klnqtwy{~����������������������������������������������
���������������������������������� ����������������������������������������������~yw�v
tsqolkigdba�_^\�Z�YW�VWY�Z \^_bfgiklnnoqs�tsqon�ln�q�sq�o�nlk�iklnqtw{|~�������������������������
���������������������������������������������������� ������������������
����������������������������~{vt�s qolkifbba_^^�\�^�\�Z�Y�WV�W�Y�Z \^_adfggiiklno�qo�no�q�s�q�o�n�l�k�ikloqtvy|��������������� �������������������������������������������������������������������������������������������������������������~{ws�q
onlifba_^\\�Z\�^\ZYWW�VW�YZ\\^_abd�fgklln�o�q�o�q�sqonn�l�klosvwy|�������������� ������������������������������������������������������������������������������������������ �������������~||{wtq�o noonnlida^\Z�Y�Z�^\ZYWVV�R�TVW�YZ\\^^_aab�dfikllnoq�s�t�s�q�stssttqonn�lnqtw{|��������������������������������������������������������������������������������������������� �������������������
�������������~{ywvtsqo�n�lkgd_\Y�WY�Z�\ZYWVTRQOQRRTVYZZ\�^�_a�bdgkllnq�tvwwvtt�s�tsqoonnllnooqsvy~���������������������������������������������������������������������������� ��������������������������~~�������� �����~||{yvs�qon�l�kigd_ZW�VY�Z�YWTRQOMOQQRVYZZ^__�^_aabdfilnosvvwwyywwvts�qst�vtsqqoo�noqtvy~������� ���������������������������������������������������������������������������� ������������������������~|{~������ ���~|{ywvs�onl�k�i gfb_ZVTTVYZZY�WVRQO�MOQRVYZZ^�_�^ _aabdfgknqtvw�ywvsqooqt�vtssqq�oqtw{~���������������������������������������������������������������� ��������������� ������������������������~||{{|�������� ��~|{ywtsq�onlkii�gfb_^YVRRT�W�V�TRQM�LMOQTWZZ^__a_^^__aabdffilqtvw�ywvtqooqt�vts�q
oqsw{|������������������������������������������������������������������������������������������������������������||{||~������� ���~{ywvssqq�oonli�g fdb_\ZYVRR�TR�QOL�J LMQRVYZ\^_aa__�abd�fgkostv�w�vtsqqsst�vts�q svy|~������������������������������������������ ������������������������������������������������������������������~||~||~��������~{wvt�sqooonli�gda_\ZYWW�T�Q�OML�J LMQQTWZ\\^�_�a bdffgfgknqst�v�t�s�q�ts�q stw{~����������������������������������������������������������������������������������������������������������������~~�~||�~�����~�|{wvtss�t�qonli�gfb_^ZY�WVTROMMOO�ML�JLMOQRWZ�\�^�_abd�f�giklnostt�s�q�oq�s�t�s tvy|����������������������������������������������������������������������������������������������������������������������~�|~��~||~|{{yv�t�vtsonlkgffda^\YYWVVTRQ�M�LML�J LMORWYZ\Z\^__abffddgfgiklnoqqoqqo�nonn�oqssttvvw{|~������������������������������������������������������������¾�������������������������������������������������������~|�{�~�|�{vtvvwwvtsonlkgdba_\ZYYWVTRQO�MLJJLMML�JLORVWYZZ\^_abdffddffggikl�nl�k�l noonnosstvy{|������������������������ ������������������� ����������������� �������������������������������������������������������������|{yy{�|�{�y�{wvv�wvtqqnkigda_\ZZYYWVRQ�O�MJIIL�ML�J�LMQRTVWY\^_adfgffdffggik�l�k�i�k lnnllnqstw{~����������������������� ����������������������������������������� ��½��������������������������������������������������������~{�y�{|{�ywyy�{ywv�wvtqqnkgfda^�ZYWVTQ�O�MLIGIJL�M�L�M
OQRTVY\^_bf�g�fg�ikllkii�gi�g�i klnllnqsvy|������������������������ ������������������������ ������������������������������������������������������������������������~~{�y{|{y�w�yw�vtssqnkgdb_\�YWVRO�M�LJ�GIJ�M�L�O�M
OQRTVY\^_bf�gfg�i�gi�g�i/klnllnqsv{|������������������������������������������������ ������������������������������������������� ��������������������������������������~~{�y{|{yw�vwvv�wv�t�sonkgda^ZY�WVTQOML�JI�GIL�M�O�QRTVY\_adf�g�i�g�i�kl�noqtw{|~���� ���������������������� ������������������&�������������������������¾������������������������������������������������������~|�{�|{wv�t�vts�q�olida^ZYWWVTRQOML�IG�IGIJLLM�O
RQRTWY\_adf�iki�gfggii�k�i�kl�noqsvy{|~�����������������������������
�����������/������������������������������������������������������������������������������������������������~�|�~|ywvtt�s�tvtq�oq�o
lida^\ZYWTR�QOLI�G
JLJIIJJLORR�Q�R
TVYZ^_bfgik�lkig�f�gik�lk�ikln�o#qsvwy{|~������������������������������ �����������������������������������������¾�����������������������
��������������������������~~���~|ywvtt�s�tso�nonlkgda^\ZWVTRQRQOLI�G
JMLIIJLMQTT�R*QRRTVZ\_adggiklnnkkigffggiknnlkiikkllnoqqtv�wy{~����������������������������������������������������������������������������������������������������������������������������~~�����~|{ywvt�q�sqolklln kigfb_^\ZWVT�RQOLJ�ILMLJJLMQT�V
TRRTVWZ^adf�g ilnnllkigg�ilnnl�k�l�noqstv�wy{~������������������������������������������������������������������������������������� ��������������������� ��������������~����~�| {ywtqooqssolk�ikgfdba�^\YWTR�QOL�JMOMLMOQR�V�W
VTTVWYZ_bdf�giknonnlkiikkinoonklknn�qstvv�w&y{~���������������������������������������������������������������������������¾����������������������������������������������~~�|����~�|{wtq�o�snkigffgfdba_�^\ZYVR�QM�LMOOMMOQRT�V WYYWVWYZ\_bdf�gikn�onl�knoon�lnos�tv�wy{|~�����������������������
�����������������������������������������������¾�������������������������������������������~|�{�|~��~�|{wtsqooqqnigfddf dba_^\^^\ZWVT�ROM�L�O�MOQRT�VW�ZWYZ\^abbdfgiklnoonnll�knoo�lnqt�vwyy{{y{|~������������������������������������������������� �������������������������¾�����������������������������������������|{wwy||~��~~|�{ywtsq�onkgfdbbdba_^^�\ZY�WV�TRO�M�O�MOQRTVWWYZ\\ZZ\^_abbdfikl�n�l�klnn�l&nostvvwy{|~~||~������������������������������������������������� �������������������������¾����������������������������������������
�����~{yvvy�|�~|{yy�wvsq�onligfd�ba_^\\�Z�YWVWVTQ�O�M OQRTVWWYZ\�^ _abbfgilno�n�lkl�klnn�l nqstvvwy{~��������������������������������������������������������������������������������¾�����������������������������������������
�����|ywttw�{�|�ywyvvttsqo�nlkifdb�aa_�\Z�Y�Z�YWVTRRQO�MORTTVWYZ\^_aa__aabdgiknoo�nl�kl�n ostvvwy{|������������������������������
�����������������������������������������������������������������������������������������
�����|yvttv�y�wvtsqoonn�lkifdba_a_^�\�Z�\Y�Z�W�VTRQ�OQTVVWWY\^_abbaabbdfgik�n�l�k�i�kln�o3qtvvwy{|~���������������������������������������������������������������������������������þ������������������������� ���������������� ����~{wttstvv�w�vtsqqoon�lkifdaa__^�\�^ \ZZ\ZYYZZYWVT�RTVW�YZ^_ab�d�f�gik�l�k�iklno�q svwwy{|~�����������������������������������������������������������������������������þ�������������������������������������� ����~{yvts�qst�vtss�q onllnlkigda__^�\�^�_ ^\\Z^\ZZ\^\ZWV�TWYY�Z\_abd�f�gikk�l�k�ikloq�s tvwy{|~������������������������������������������������������ ����������������������¾��������������������� ��������������������~{wwtsqonnoq�ts�o�q onllnlkigd_^^\�Z�\^_a_^�\�^�_\YWVVWZ�\�^_abdf�gikl�n�l�nlkiiknqs�tvwy{|������������ ��������������������������������������������������������������¾�������������������� ������������������|wvvtqonlkloqsqo�no�qon�lkigfb_\ZZ�YZ\^�_^\\^�_�a_\ZYYZ^__^^__aabdggiilnoqqoo�nonllklloqsttvvwy{|~���������������������������������������������������������������(��������������������������������������������������������������������{v�t onkkiknnon�lnoqoonlkkigfdba_\YY�VWYZ\�^�\^_aa�b�a_^\\^_aa�_�abdggiknoq�s�q�o�qo�n�oqst�vwy{|~��������������������� ���������������������������������������������������������������¾�����������������������������������������~|yvttsol�i�k lnoonlkiigfdba�_\YW�RTWYZ\�^�\�_a�babba__�a�_�a bdggiknqsstv�tsqqs�oqsstv�w vww{||����������������������������������������� ���������� ����������������������������������������������������������������������������~{yywvtsqnligi�g�iklnnlkigfdba_^\^^ZWV�QRTVWZ\^^�\�^_a�b�d�ba�_�a
bdfgiknqstv�wvtss�qst�vw�y�wy{|��������������������
������������� ������������������������������������ ����������������������������������������������������~{w�vtsqnlkiggfddffggikllkigfda_^\�ZYVR�O�QRTWZ\^^\\^^__abd�f�dba�_�abdffgknst�w�ywvt�st�v�w�y{�y{~��������������������������������������������������������� ���������������������������������������������������������������������|y�t�sonkiggffddbddfgi�kigffda_\ZYYWVVRO�M�OQRTWZ\�^�_abd�fdba__^^_aabdffgknsvyywwy{{ywv�t�v�wy�{#|�����������������������������������������������������������������������������%����������������������������������������������~|w�sqolkigff�d�bdfg�ig�f db_\ZYWTRQOM�L!OMMOQRTWZ\^^\\^^abdffggfdaa^^\\^_b�dfgilsv�wy{{ywv�t�v�w�{�|${|��������������������������������������������������������������������������������������� ����������������������������� ������~{vq�onkigf�d�babdffggf�d ba^ZYWVRQMLLJL�MOQRTWZ^^�\ ^abdffggfbaa^�\^_b�dfgilqt�vw�ywv�t�v�wy{�| ~���������������������������������������������������������������������������������������������������������������������� ������~yto�nligff�dbaab�abd�fdba_^\YWVTROLJJ�J�LMOOQRVW�\^ab�d�fdbaa_�^_b�dfgilq�tv�w�yw�v�w�v�w$y{||~���������������������������������������� ������������������������ �����������������������������������������������������������������{vsn�lkggfd�ba__a�_ab�d ba_^\ZYVTROL�J�J LMOOQRTVYZ�\^_a�ba�_�abdfgiknq�t�v�w�vwyy�w�y{|~���������������� �������������������������������������������������������� ��������������������������������������������������~ytqnllkiggfdb�a_^^_�^_b�d
ba^\ZYWTQOL�J�J�L�MOQRVY�Z\^_�a�_a�b�a baabfgklnq�s�t�v�tw�y�{ywwy{|���������������� ��������������������
��������������������� ������������������������������������������������������������~ytolklkkigdbaa_^�\^�\^abddb_\YWVTQML�J�LMORVW�YZ\^�_�^_a�b�abfilnno�q�s�tvw�y�{y�wy{|���������������� ����������������� ������������������������������������������������������������������� ��������~ytol�kigdbaa^\�Z\ZZ\^_a�b_ZWVTQML�J�L�M�LOQ�T�VWZ\�^�\^_abbdd�bdgklnnl�n lnooqstvvwwvvw�y�wy{���������������������������������������������������������������������������������� ����������������%��������������������~{wtnkiigiggdba_\Z�YZ\^_�a ^ZWTROLJII�J�L�M�LMO�QRTVWY\^^�\ ^_abddbbdfgik�l�k�iklnost�vtsst�wy{~���������������������������������������������������������%���������¾�������������������������������� �����~~����� �~{wvsnkig�fdba_\ZYY�WYZ\^�_
^ZWTROLJIIJ�L�MOMM�L�J LMOQQRTVWZ�\�Z \^^_bbabfggii�k
iggffgilnqs�tsqoqtt�v*wy||����������������������������������������������������������������������������������������� �����������������������~�|~���.~|yvtqnligffddfda_\ZYWWVWZ\\^__^^\ZYVQMJJIIJLMM�OM�L JIIJLOQQRTTVY�Z�Y�Z�\^_aabf�g�igf�dfgilo�qonnoqs�t vwy{~���������������������������������������������������������������������������� ������������ ���������������
����������|�{|�~|{wtsqonkgffddffb_\ZY�WY\^^�_�^\ZYVQM�JLMO�M�LJGIJLMOQRTRTVWWYWWYZYZZ^_aadffgg�f�d�b�dfil�n�l�noqq�stwy|�������������������������������������
������������� ��������������������������������������������������������������~�{y�{�|{ywtsqonkgffddffda^\ZYYZZ\�_^�\ZYTOM�J�LM�JIGIJLMOQ�R�T�V WYZYYZ^_ab�d�fd�b�a�bdg�k�l�no�qsvy|����������������������������������������������������������������������� ������������������� ���������������~~||�{�y�{
ywtsqnlkigf�db_^�\�^�_^\�ZYWROMLJII�J�IGEGILMO�Q OQQTTVYZWWY\_a�b�da__a�_�a�_abfgg�i'klkklkklonoqvy|���������������������������������������������������������������¾���������������������� �����������������~|{{�y�w�ywvtsqnlkiigfdbddba�_a__a__\Z�Y WVQMMLIGGIIGI�G�E�G�EGILM�O�MORTVWYWWYZ^_aa__aa_^^�_�^_adf�gi�k�i kllnqtw{������������������������������������������������������������������������������������������ ����������������~|{{yy�w�y�wvtsqnlk�igd�b�a�b�a_^\ZYWVVTQMLJIG�EGD�B�EGIJLMMLLMMLMOQRTVWVWYZ^^_^\\�^�\�^\�Z\_ab�dfg�i�giklnqty|�����������������������������������������������������������������¾�����������������������������������~~|{yy�wy{{�ywy�wvtqollk�igd�a bdb_aa_^^\ZWT�ROLJJIGE�DA�?AD�EG�I�J�IJLLMOQRT�VWYZ�\�Z�\�ZY�W�YZ^_�abdf�g�f giklosw{����������������������������������������������������������������������������������������������������~|{�y�wy�{y�w�y�w vsonllkiggfda�_abba�^�\ZYVRQOOMLJJIGEDBBA?<==?BDEE�G�EGJLMOQQRVVWWYYZ�Y�WYZZ�YW�V�WYZ\^_�abdfgg�fgklnqvy~������������������ ����������������������������������������������½�����������������������������������~|{y�w�y {yywwvwwywwvtsonlkiiggfda_^^_aa_^�ZYZYWTQOMLLJLLJGGEBA? =<<=?ABEGGEGGE�D EIJLMOQRTV�W�VW�YWV�TVWYZ\^_�abdfgig�fgklnqvy|�����������������������������������������������������������������������������������������������������|{y�w�yw�v�wvtsqonlkiigfdba_^^__^\ZY�WVTROML�J�LJGGEB?==<<=?ABEIIEGEBAABDEIJLMQRRT�V�TV�WVT�R�T�V WYZ\^__abbdgig�fgikloty|������������������������� ����������������������������������������������������������������������������|{yvv�w�t�vtsqonnlkiifdba__\\^^\ZYW�VRQQML�JIGGDA?=?==?ABDGIIGEDA??ABDEIJLO�QR�TV�WVT�R�T�V(WYZ\^^_abbdgiigffgiiknsy~��������������������������������������������������������������������������������������������~{yw�v�t�vtss�tsqon�lkigdba_^^�\ ZWVTTVVTQOMLL�JI�GEBA??A?AABDEGIIGDB??=?ABBEIJM�OQ�RT�V WTRQQRRTVWVWYZ�^_abdfikki�g�iknsy~�������������������������������������������������������������������������������������������������~|w�v�t�sqstssqonlkikllkigba__^^�\ZWT�R�TRML�JIGE�D�B�A�B�DE�G EBA??==?AABEIL�MO�Q�RT�VTRQQRTV�W�YZ^�_adgikll�k�iknsw|������������������������������������������������������������������������������������������������~|yv�ts�q�sqonlkkigi�kifba__^�\ZWTQOO�QOLJ�I�JIGED�B�DB�E�GEDAA??�=�?ABEIJ�L�MORRT�V�T�R�TV�WYWY\^_abfiklnnlln�klosv{~��������������������������������������������������������������������������������������|{wt�sq�s�qsqonk�igff�igda_^^\�ZYWTQMLLM�LJ�GED�BDEE�G�EDBAA??�=�?ABEIJJLMLJJLMQRT�VT�R�T�V�WYZ^_bdgklnoonno�noqsv{~��������������������������������������������������������������������������������������� �|yvtsqooqss�q�sqonli�gfdd�fdb_^\\ZYYWVROMLJII�G�E�D�BDEG
IGEDDEEDDBA�? =AA?ABDGII�J�IJLMQ�T�R�T�V�T VWYZ^adgilno�q�o*qssv{~������������������������¾�������������������������������������������������������������������|yvsq�nqssq�sqnlkg�d�bdbba_^\\ZZYWTQOLJIGE�D�E�BAB�AB�DEG IGEDDEEDBAA?==�?�ABDEG�I�JLORRQQ�R�T�RTVVTTVWZ\_bfiknoqq�s�q)stw|��������������������������������������������������������������������������������~���� �|yvsollnq�sqonlif�ba_�^ \ZYYWTQMLIGEEB�ADEEDBA�?ABD�EGI�G�E�DBAA?=<==�?ABDEG�IJLMQQM�OQRTRQR�T WY\^_bfiilnqq�stw|������������������������������������������������������������������������������~~|�{�|~���~��~|yvqnllnooqssqqonlkgd�a�ba__�^\ZYWWVRMJIEEDDA?�= ?ABDAA?=<=?ABD�EG�IGE�DBA?=�<�=�?�ABDGIJJ�IJL�M�LMQRRQQRRTVYZ\^_adfgilo�qs�tvy|���������������������������������������������������������������������~|{y�wy{|~���~
���|{wtqnll�noqqoonlkifba__aa_�^
\ZYVTTROJGE�DBA=<:<=?AA??=<:<?AABDEGIJIIGEE�DB?=�<�=�?�ABDG�J�IJLMLJ�ILOQRQQRRTVYZ\^_abbdgknq�oqs�tvwy|~���������������������������������������������� �������������������������~|{{ywv�tvy|~���~��
~��|ywvsqnn�l�n lkigdba_^^_^�\
YWVRQQOLGED�B?=<:8:=?A?==<::<�?ADEGIJIG�EDBA?=�<=?�A�BDEI�J�LJIGEEGJMO�Q�R TVYZ\\^_aabfil�oqsttvwy{|~����������������������������������������������������������������������~|{ywvtt�stw|~���~ |ywvvsqoonllnn�lkigfddb_^�\'ZYVTRQOMLIEDBAA?=<<:8:=?A?=<::<<==?ADEGI�I�GED�A?=�< =?AABDEEIJJIIJ�LIGEEDEEIJMMOOQQTVYZ�\�^_adgk�ostvwy{�|~�������������������������������������������������������������������������~|{yvt�s�qsv{~������~~|{yw�vtsqqon�ligff�db_^�Z\ZWVTQOMMLJGDA?==<<::878<=?==<::�<=?DEGI�G�IGEB�A?=<<==??ABDGIJJIGIJLMLJGE�D�E GIJJLMQQRTWYZ�\(^_bfknooqtwy{|~�~~������������������������������������������� �������������������������~|{wts�q�oqsvy|~����~|{yww�vt�sqn�lkgf�d ba_^ZYYZYVTRO�LJIEB?=<�:8778:<�=�<�:<=?BEGG�G�IGDA�?�=�?ABDG�J IGIJLMLIGE�D�E�GIJM�Q0RVWYZ\ZZ\^afilnosvy{|~�������������������������������������������������
����������������������������|{vtq�oqstw{|���~|{ywvtt�vwvvttso�lkiffddbbaa_^ZYWWVTQOM�JIGDA=<:�8�78:<�=�<�8:=?BDEG�E�GEBA?�=�?�=�?ABDGJJ�IJLLJIG�EGJM�QRTVWY�Z \_dgklosvy|~�������������������������������� �����������������������������������������|yvtq�o�qstwy{~��~{ywwtssttv�wvtsolkkg�fdba__^\ZYWVTROMLJIIGEB?<:�8�78:<�=
<:88:=?ABDE�B�D�A?=<<?�=?=?BDGIJ�I�JLJIIG�E�DEIM�Q�RTVW�YZ\^adiknqvy|~������� ��������������
���������������� �������������������������������������~~{wtsqq�osqstwwy|~�~{ywvsqqss�vwttsoligf�d�ba^\\ZZYWTRQOMLJIGEDA?<<:887�5788::�<:�8:<=?ABB�?�A?=<<=�<�=ADEG�I�J�IG�ED�BDEIL�OQRRTVWWYZ\^_bfilotw{~�������~ ��������������� ��������������� ��������������������������������|{wvt�sqoqsstvwwy{|~~|{yvs�qs�t�sqnkgfdb�a_\�YWVTRQOMMLJGEDA?==<:875445�78�:8�78:<=�?�<�=�?=<<�: <==<==ABDG�IJII�G EDDBBDEEIL�MOQQRTVWY\^__abfilqvy|����~�||��������������� ��������������������������������������������������������{wvvtsstsqqsstvwy�{�|{yvs�o�s�qolifdba�_a_\YWVWVVTTROOMMLJGEDA�?=:75�4�5787�578::==<�8�:<�=<:88:<=<<=??ABEGG�I�G�I GEEDDEGGIJ�L MOQRTVWY\^�_ adgknsw{|~���~�|~����������������������������������������������������������������{wvv�t�vtsstvvwy�{yvs�o�q�onlifda_^^__\YWVTT�RQ�O MLJIEDBAA?=:75�4200�2 4554224788::8�57�8:8�: 878:<<::<==?A�D�GIG�EGIJI�G�E�GI�JLMOTVWYYZ\\^^_bfilqvy{|�~�|{|~�������������������������������������������������������������������|yw�vwv�twvvwy�{�ywvqonnoo�n�o�l ifb_^\\^^ZWVTR�Q OMMOOMJIEB�A?<7545420�/�0�2�025�7�5�45�7�5�78�:�<=?AABDEGG�EGIJJ�I�G�IJLOTW�YZ\_bfgkotwy{|~~|{{|~��������������� �������������� ����������������������������� �������~|ywwyy�w�vw�vw�yw�vtqo�n�l�nlkifa^\�ZYVTRQ�O�M�OLIEB�A ?<8755420/--/�0�/0245422024�5�4�57�8:�<�=ABD�E�G�IJ�LJGGE�GIJMRVYY�WY\_adgknqtw{|~~|{y{|��������������� �������������� �����������������������������������|{y{yywy�w�v�wvt�sq�onllkklkigfb_\YYWWVTRQQOO�M�OMLJGDBA??=<:87542/-,,-/0//�-�/02200/0�4�2�4�5�78:<�=�<=ABDDEGI�JLMOO�MLIG�EGIJMQT�W�VWY\_adgklosw{|~~|{yy|���������������� �������������� ���������������������������������������~||{{�yw�v�wvts�q�s�qonlk�i gfdb_\YWVVTR�QOM�L�M�LJIEDB?=<::87420-,**,-�/�-/00//�/�0�2�0�2�4578::<<�=<=B�DEGIJLLMOQ�O LIGEEDEGJMOR�W�VWY\_adfiknswy{|~||yy|�������������� ������������������������������������������������~~||{yy{{�wvs�qs�qonlli�g fdba^ZWVTRRQ�OMJ�I�J�L�JIGEDB?=<::8720/,*((*,,-/�-�,-00//�/�024457�8:=�?AD�E�G+IJMOOQQOOQQOLJIGEDDGJLORVWWVVWYZ^abdfinsvwy{�|�{~�������������� ����������������������������������� ���������������~|{{|{�y�wvs�q�sqnlkkig�fda^ZYWVR�QOMMLI�G�IGEDBBA?<:8752/-,*�(�*,�-�,-00//0/--�/�0�/022457788:=?ABDEGG�IJLOQQRQOORROMJIE�DEIJMQTVVTTVWYZ^abdglqtvy�{|�����&����������������������������������������������������������������������~�|{y{{y�vs�qsttqnlkiggffdb_\ZYVTRQOOMLLJGGEE�D�E�GEDDBBA?<87540/-*�(�*�,-00/00/--�/02245778:<=?BEGGIJ�LMO�Q�R�Q�RQOLIE�DEGILOQRTRRTVWY\_abfknqtw�y{~������������������������ ���������������������������������������������������~|�{w�vt�stvvsolki�gfda^\ZYVTRQOMLLJIGGED�BDEED�B A?=<85420/-*((�*�,-/00/0�/�-�/�-�/ 0224577:<<=?DG�IL�MOQRQQRTQQ�RQMJG�D�EGILO�QRTVWY\^_bfilnqv�w{|~��������������������������������������������������������������������������������~{{ywwvv�t�s(vwvsonligffdba^\ZYVTRRQMLLJIGGEEDBBABDDBA�? =<8520/-,**(�*�,-/0/-/�-�/-,,-/0224578:<=?ADGIJJLM�OQ�R�T�R�TROLI�EGJMOOQRTWYZ\^_bfiklostvvwy{|~����������������������������������������������������������������������������|{�yw�vtsstvwvsonlkgfddba^\ZZWVTTROMLJI�GEDB�A ?=<<==<:8520/-�,�*�,-//--�,-�/,**,/02244578<?ABEIJLLMM�OR�TVT�RTVVROJGG�EILMOQRVWYZZ\^adgkknoqstvwy{|~~��&�����������������������������������������������������������������2�����������|{{yywwvvtsstvwvsonlkigfdba_^ZZYWVVTQMLJ�IGEB??==<�:�<�:852//�-�*�,�-�,*,,-/--�,
-//-*((*-02�4 578<?ABEIJLM�OQRT�V�TVWWVRMJI�GILMOQRVWYYZ\^abfiklnoqsvwy{{�|~������ ����������������������������������������������������� ����������~||{�ywv�t�vtsol�kigdbaa_\ZYYWVTQML�JIGEB?=<::�8�:�8740�/-�,�-,�*�,-//-�,�-,*�(*,/0445778<?ABEIIJM�QRT�V WVVYYWROML�JIJMMOQRTVWYZ\_aadgikloqsvvw�{|������� ������������������������������������������
������������� �����������~|�{w�v�wvsqnl�kigdbaa_^ZYWVVTQOM�JIGEB=<:�8�752/�-�/�,�-
,*((*,,-/--�-,*�(*,-045788:<?ABEIIJMQ�R�T�V WYZYWYYWTRRQ�O�M�OQRRTVYZ\_aabdgiloqstvw�y{|~����������������������������������������� �������������� ������������~�|{y�wvsonlkkigfdbba_^ZWVTTRQQOL�JIGEB=:�87540�-�/�-�/ -,*((*,-//--�-*(�'!(*,-0258::<<?ABEIJLMORRTTRTTVVYZ\Z�YW�V�TRQ�R�Q�RVYZZ^__abfgknoqsv�wy{{|~~�������������������������������������������������������������~||{�y�w$vtsonlkkigffdda_\YWVTRRQQOLLJJIGEDB=:�878740-,�-�/�-�/
-*((**,-/--/-*(�'!(*-/0258:<==?ADEILMOOQRTVTTVWWYZ\\�Z�YWVVWWVT�RV�YZ\^_adfgknoqtvv�tvwyy�{|����������������������������������������������������������������~||�{ ywvttsqonllki�gfb_\YWVT�R QOMMLJIGDBA?<�8�752/,,-�/�0/,�*,-�/0-*(�'(*-/0258:==??ADGJMOQOQRVW�VYWY�\�Z�\�^�\ ZYYZZYWVTRRTV�WYZ\^_bbdgknoqssqqsstvwy�wy~���� �������������������������������������������������������������~|{|{ywvttsqon�lk�igda^ZYWV�TRQMMLLJGDA??<88�: 8754/-,,-/�0�/�020-�,�-/000-*(�'(*,-047:<==?ABEILMO�QRV�W�YZ�\�^_aa_^�\ZYVTTV�W
YZZ\^aabfil�n�oqst�vwy|���������������������������������������������������������������~||{yw�vtsqo�n
lkigfb_^\ZW�VTROMLLJGDA??<::<<:8520-�,-/0022�0�20/--�/�0/-*(�'�(*-048<�=?ADGJMM�OQRVW�YZ�\�^�_�ba_^\�^\YWVV�WYZZ\^_adg�k�l noqstvwy|~������������������������������������������������������������~|{y�wvtsqoo�qolkgfdaa_^ZYWVTTQOLLIEDA??�<:8740-�, -//0/0202244�20/�0/00/-*(�'�(*-258<�=?BEIL�OQTVW�YZ�\^__ab�dba_^^�_^\ZYWWY�WY�Z^adfgg�i klnosvy{|~�� ���������������������������� �����������������������������������~{�y+wvtsqsttsqoligfdba_^\YWVTRQMJGEDBA?==<:8752/�,-�/�02�4�20�//-*(�'(*,/258<<=?ADGJMOQOOQQTV�Y�Z\^_aabdf�dba_�a_^\ZYYZYYWWYZYY\_bbdf�g
iknqvy{|~���~�����������������������������������������������������������������������|�{*ywvttvvtsqnkiifda_^\ZYWVTQMJGEDDB??=<:8752/�,�-�/�0242�42�4�20--/0/,(�'(*,/0478:<=ABEILMO�Q�RTWYYWY�Z\_abdd�fd�ba_^�\ ZYWWYWWZ^__ad�f�g�f ilqtw{|~���~ ������������ ��������������������������������������������������������������~|{y�w#vtsonlkgda_^\\ZYVTQMJGEDDBA?=<:8752/�-�,-/�0�2 455455420/--/#0/-*(''(*,02578:<?DEGILMOQQRTVVWYYWY�Z\_b�fgf�g�f�d�b�a_�^ZY�WVWY\\^_a�d�fgkosvy{~�� ���������������������������������������������������������������������+�~|{{wvttqonkifb_^\\ZYVROLJGEDDBA?=::875200/�-/�0�2457�540/�-/�/-,*((*,-04788:=BEGIJLMOQRTV�WYZ\^ad�g�ig�fdb�a�_�a^ZYYWVVWYZZ\^_b�d�fgknqtw{~�������������������������������������������������������������������������'��~~|yvttsqnkigda_^\ZYVQMJIGEDBAA?=:8754�20�/0�2�45775420/�-/�/-,�*,-/2488:<?DEIJLMMORTVV�W�VWZ\_bfg�i�ki�gda__aa�bdb_ZYYWVVWWYYZ\^adf�d�f gknqtw{~~���������������������������������������� ������������������������������������������~{wvvtsoligfdba_\YVQMIGEDBA�?<:754�20/�0/2�457754200/�-/-�,-/02458:<?BDEILMOOQT�V�W�VWZ^adfg�i�kigda^^_abdffda\ZY�W
YZ\^adffddf�g knqtw{|~������������������������������������ �������������������������������������������'�����~|{wvtsqnkiggfdb_ZVQMIEDBAA?==<:754�2�02455�7�5�754�2/---�,-//02457:<?BDEGILMOQRVWWVWWVT�VWZ^bdgg�ikllifba^^_abfggfa^ZY�WYZZ\_bd�f�gknqsvy{~����������������������������������������������������������3�������������������������~{wvtsqnkkiiggfaZVQMIEDBA?=�<:742�0245�7�5�7�5�40--�,-/�02478:=ADEGIIJLMQTVWW�V�TVWWY\_bdg�ikllifba�_ abdffda^ZY�W YZZ\^abdff�g knqstw{~��������������������������������������������������������������������������!�������~{wvsqonllkiigfa\VQMJGDBA?=�<:742�0�2�0�247�8�7�52/-�- /020245778=ADG�IJLMQRVWWVTTRTVWY\^_bdg�i�kiklkgfda�_�a�ba_^Y�W�Y�Z\^abbdffgginqsvw{~������~�����������������������
������������������������������� ������������������������~|{wvsqon�lkifda\WRQMIEBA??=<:8742�024�2458�:8�787�540/�/0�245�78<ADG�IJLMOQTVVT�R TVY\_aabdgikk�l�kiggfb�_�^\Y�WY�Z\^__abdfgilosvy{|�~
|{yy{|����������������������������������������������?�������������������������|{yywtsqoonllkgdba^YVTQLGDBAA?=:8742002�457:<�=<:�8755�420�02�4�7878:<?DEGGIJLMMO�RTVY^a�bdfikk�l�kiggfda_�^�\Z�Y�\�Z�Y�Z�\^_adfilnqtwy{||yywwvvwy|~������
����������������������������������������������������������������~ywvwvtsq�onlifdba_ZYVROJGDBBA?<874�0244�5�7:=?AA=<�:8755�4�2�4�57�8 :<=?BDEEGIJLMO�QR�TWZ_�bdfi�k�igfddb_^\\�Z�Y�Z�\Z�Y�Z \^_bfiklnqvw�yv�t�stwy{|���������������� �����������������������������������������������������~|{wv�tsq�o nkgfdba_\ZWTQMJGDBA?=:74002244557�8 <?ABBA=<::8755�4�5�7877�8:<=?ABBDDEGIJMO�QR�TY\_�bdffg�k�igff�d ba_^\ZYYWVVWWY�Z�\Z�YZ\^_bf�ikosvwvt�s�qsvwy{~���� ������������ ������������7��������������������������������������������|{ywttsqqonn�lkgfda__^ZWTROLIEBA?=:75�2�45788:<?BBDDB?<::87�4�5�78:<:�8:<=?�ABDEGILO�QRT�VY\_aabf�gikkiggff�db�a_\ZYWV�TVWYZ\�^\�Z�YZ\^adf�gilosts�qstvwy|��������������������� ���������������/�����������������������������������|{yvtssqonnlk�igfda__^ZWTRQMJGDA?=:875422�45778<?B�E DA<:875445�7�8:<?=<�:<=?A?�=?ADEGJMQ�RV�W Y\^_abfgii�gf�da�_^\ZYWT�RTVY\^�_^�\�Z\^ad�fiknq�o�qstw{~����������������������������������������)���������������������������|ywvsqqsonnllig�f+dba_\YWVRQMJGEB?=::87542244578:?BEGIGGDA<875�457�88:<=??=�<=??=�< =?BDEILORTTV�W Y\^_abfgiigfd�b�d
ba_^^\ZZYVT�RVY\_�a_^�\^_adff�dfgk�n�ln�oqsvy|~��~~����������������������������������������������������������|yvtsqooqonnlkgfd�b�d)ba^ZYYWTQMJIGDA=<<:875424557:=ADGIJIGDA=85�457�8:<<�=�<=<�=<::<=?BDEGJMRTT�VWY\^_bbf�gfdb�a�bdaa_^\ZYYVTRRQQRTY\_�a_�\�_bdf�dfgi�k�l�i�lnoqtw{|~~|{|���������� �����������������������������������������
�����~yvsqo�nonnlkgdbb�a_aba_\ZYZYTQOMJGDA?=<�:7545778:=ADGIJJIDA=854�5�7�8:�<�=�<�:
<=ADEEGJMQR�TVY\_abbdffdffdba�_�a�_^\ZWVTR�Q RTWZ^__aa_�\�Z\�_ab�d"fgiiggiigffgknoqsvy{||{y{~����������������������������������� ������������������~{wson�lkgd�a_^^__^\�Z YVRQOLGDBA?=�<:87788:<=ADGIJJIEA=:8�7�8�:�<�=<�:<?AD�GJLOQ�TY\_a�b�dbddba_�^�\ZYVRQOMMOOQQRTVYZ^_aa^�\�Z\^�_�abddfgigg�f�diloqsvy�{ ywy||~��������������������������������������������������������{wtonl�kgda__^�_�\�^�\�Z YWTQOLIEDDB?==�<�:<=??ADGIJJIEB?<<::�8788:88:<�=<�: <?ADGIIJLOQR�TWZ^�a�b�a_^�\ZY�WTQML�J LMORTVVWY\�_�^�\^�_abdff�gfdbb�dgloqsvy{{ywvwyy{|~���������������������������������������������������~|ytqnlk�i gda__^\\^^�\Z�Y WTQMJIGEEDBA?�=?==?A�BDGJLJIGDA??==<<::�8<:8:<�=�<�: <=ADGIGIJMOQ�TRWZ\__a�_�a�_^Z�Y�V�TQMLJIGGIJMRTVWWYZ^^�_�a�_abdbdffd�b�dfgknstvy{ywvttvvwwy{~~����������������������������������������������|ywtqnlki�gfdb_^^\�ZY�Z YWWVROLJIG�EDAA�?A??B�DBDGJLLJIEBAABBA=<<�:=<:<�=�<�=<::<=ADEGGIJMOQ�RVYZ\^__^^�_^\YWVTRR�QOLJJGEEGILQTVWWYZ\^_�ab�d�ba�_�abdd�b dfgiknsvwy{ywt�s�tvw{{|��������������������������������������������|yvsqnlkig�fdba_^\ZZY�WYZZYZZYWVTOLJIG�ED�B�ABDEE�DGJLMMLIEDDEEDA?�=
=<<=?=<<=<<�=�< =ABDGGIJMO�Q RTVWY\^^\\�^\YWVTQO�MJII�EGILQRTWVWYZ^_abdfggf�dba__^__a�b�f gilnsvwyywvts�q�stvwy{| �������������������������������������������~{wtqnlkigfdd�fba__^ZYYWVVWWYZYZZYVTQMJIGEE�GE�D�BDEEG�EGJLOOMJIGGIGEDA�??==??=<<�=�?�= ?ABDGIJLMO�Q�RTVWZ�\ZWWVROL�JIGG�EGILOQRTTVWY\_abfgiig�fdba_^^_a�bdggiknoqt�wvts�qsttvwy{~��������������������������� ������������ ��|yvtqnlkgf�d�f da_^^\ZYWVTV�WY�Z YVROLJGEEG�I�G�EG�I�GILMOOML�JIGEB�A�A�?=<<�=�A�?ABDEGIJLO�QOQRTVWZ�\ZYVVTQMJI�G�E�DEGJMMOQQRTWZ^abf�ig�fdbaa�_a�b dfgikknoqtvw�vts�q�stvww{|������������������������� �������������� ��|yvsqnlkfd�b dba_^Z\ZYWVTRT�V WYZZYVROLJIGGI�J�IJLL�JLMOOMMLJJ�LJGEDBAA�BA??�=?A�B�DEGIIJLO�Q�ORVWY\^^\^^\ZWVTROLIGEDDEDBBDD�BEI�J LMOQTW\_ad�g�fdbaab�a�bdfgik�lnqst�vt�s�q�s�t�v wy~��������������������������������� ��~yvsqonkfb�a_^\Z�YWVT�R�T�V WYZYVRQMLJIJL�M�LM�O�M�OMLL�J LMMLIGEDBBDBA??==<<=?ABDD�E�GJIJLOQ�OQVWZ\�^\ZWVTQOJGDBAABBA?�ABDE�G
ILMMQVY\_bd�f�dbaababbd�b dfiklnllnoqs�tv�t�s�t vw|���������������������������������� ��~yvtssokfb�a_^ZY�WVTT�R�TV�W�YVTQMLLJMO�Q OMMOOQRTRR�QRQOMLLJJLMMOMIIG�DDB�A ?=<<=ABBDE�G�I�J�LM�OQTWZ\�^
\ZYWVROMJEB�?�A?�=?AABDEEGIJLORVY\_abddbbdd�b�dfil�noqss�t tv{�����������������������������������|ywwvtqlgb�a_\YW�VT�R�TV�WVTQO�MOQRTTRQQRTVWWVT�R�TROM�LM�OMJIG�E�BA=<<=ABDDEGIIJJL�J�LM�OQTVZ\�^ \ZWTROMLIDB??�=<�:<�=?�B
DEIMORVZ^_a�b�d�f�dfgil�noq�st�v�t tvy|�����������������������������������|yywvtqlgdba_^ZWV�T�R QOQQRTVWVVTRQQ�ORT�V
TVWWYYWTRTT�VTQO�M�O�QOLJIGGE�B�DB?==?BD�EGIJLMMLJJLLMOQQ�OQTVY\^^�\YTQOLJIGDBA?=<:�8�:<�? ABEJLORWZ^_abd�f�gf�d fgiklnoonnoq�st�v�w�vt tvy{~����������������������������������|{ywvtqlifdb_\YWV�T�RQO�MOQTVVT�R�QRTVWW�YV�T�VTR�Q�RQOLJJIE�D�E DBA?ABDEEGIJJL�MLJJLMOQ�O�QTVWZZ\Z\ZWROMJGEDBBA?=:87�5�78:<==?BGILOTWZ\_bdff�g�if�d fgkllnoqqooqs�t�stvv�w�vt�vwy|~������������� ����������������������~|yvtsqlkgfba^ZWV�TRTQQOOMMLOOQRTTRR�TVWYZ�\Z�YW�V�T�R�T RTTVVTRQOMLIE�E�G EDBBDEGGIJ�L�MLJLMOQOOQRRTVWYY�ZYVQMLIEDBAA?=<:75�4�2"45578<<=ADGJMQTWZ^abdfgiigiifddfgkn�oqssqqstv�wv�tv�w�v�w y{|�����������������������������������|yvtsqnkifdb_\YWV�TQ�O�M�OQR�TVWW�VWZ\�^\�ZYWWVV�TVWW�V�W�VTRQMJG�IJG�E�GIJL�M�O MLJLMORQQR�TVW�YZYWTOLJGEDB??=<:855442200�24588:=ADGJMQTY\_abdfgigii�fglo�s�t�vw�ywvtv�w�vw�y�w
y{~�������������������������������|yvvtqnkigfb_\YWWTTRRQ�O�M�OQ�R�TVYY�WYZ\�_ ^Z\\^ZYYWW�VW�Y�WY�WVTQMJ�LJ�I�J
LMOQQOOQQOM�LMQTTRT�VW�YWVROLIGEDB?=<:87�542�024578<?BEGJMRWZ^_abdf�gilqtvv�w�ywvwyyw�vw�y�wy|��������������������� �����������|ywwvsnkigfb_\ZYYVTRRQ�O�Q�OQRQQR�TVW�Y�Z\^�_^\^__^\�ZYWWY�Z�YWVTQMQOO�M�L�MOQ�RQRQOM�LOR�VYZYYWWTROMLIGGDA=<:877�52�0/-/0458:=?BEILRVY\^_abd�f�g�iknsvwy�{�y�{yw�v�tvw�y�w {|~������������������������������|yywvsoligfb_^\ZZWVTRQOO�Q�R�QRQQR�TVWYY\^__aa_^\^_aa_^\\ZYYZZ�\�YZYYWTQVTRQOOQQ�OQRTTRRQOMLLMQTVWW�V WYZYWVTQOMLJ�IEA=:8�7-54200220-,-/2478<=ADGLQTVY\^_abbdfgikklnosvy{|�~�|{ywwvttvw�y�w y{|~������������������������������~{ywvsoligfba_^^\ZWVTRQQ�RTVT�R�TVWY\_�a
_^^_abdba_^�\�^ZYY�ZYWVYWVTTRTR�QOQRTTVTTQOOMMORTVVWVWW�YWVTROMLJ�IGB=:8�7"5420022/-,,-0045:<=AEIMORVY\^_aabfi�knossvy|~~���~���~|{wwvtvwy{yywvvwy{|~~����������������������~$����~{ywvsoligfbba__^\YWVTTRTTVWWVVTT�R�TVW\_�a_^_ad�fda__a�_a__^�Z\ZZ\Z�YWVT�R�QR�T�VTR�Q�R�T�VW�YWVTRQMLJIGGIIGD?<:8�754�2+0/-,,-//048:<?DEILQTVYZ\^_afikklnqttvy|~~���������~|{yywvwy{|{ywvvwwy{||~������������������~�|~���~{ywvsnkigfdbaa_^\ZYYWWVVWYY�WV�TVWZ^�a�_bf�gfdbb�d�ba_^�\�^_�^ZWVTT�R�T�VTR�QRQRRT�V�WVTROMJIG�E�IGDA=:8755�420/-�,�-!/278<?BDEIMQRVWYZ^_dgklnoqttvw{|~���������|�{�wy{|~|{w�vwy{|~����������������������|�{|~���|{wtqnkgffdbaa^�\�Z�Y�ZY�WYWWV�TVWZ\__�a�_bfggigg�f�gfdda_�^�_�a_\YWWVTTV�T�VTR�QRQQRT�VTROLJIGEDDEGIGDA?<:75�4�5420/-�,#-/0258<?ABEILOQTVWY\_bfknoqstvwwy{~��������|�{�y{|~�~|yw�vw{|~����������������~|�{|���~{wtqnkgffdbba^\\�^�\ZY�W�YWVV�TVWZ\^_�a�_bfgg�i�g�igfdba�_�a�_�ba_^�ZWVVY�W�V TRQQOQOQQRTT�V�T ROLJIGEDBB�EBA?=<7�5�20//-�/#0245:=?ABEILMORTWY\^afinqstvvwwy{~����������||�{|~��~ |ywwvvwy{|�~������������~�|�{~��|ywtqnkigfddba_^\�^�\�YW�Y�W�VWY\^^�_df�g�ikllkgfdbb�a�dbaa�dba_�^\ZYY�ZYWVTRQO�M�O�Q RTVVTRQMJIGED�B�D�BA?==<8�754�2�0�24578<?ABDGJLLMQTWZ\^afilqtv�wy{|�������~||�{�|~���~{yywvwyy{|~||~���������~�|�{|�{ |~~{wvtqnlli�fdba_^^\\�ZY�W�Y�W�Y�WYZ\^�_ad�fgiklnnlig�fdbbd�f�d�fda�_^\\Z�\ZYWTQOM�LMORTVVTROMIGDDBBDBAA??=�<:�85442�4�578:<=ABDEGIJLMORVZZ^afikosvw�y�{~�����~�|�{|~����~|{{�wy{�|~���������~|�{�|~|{wtsqonnkgfgfdba^\YYWYYW�VWYYWWY�Z�YZ\^aa�_�a�dfgklnnlk�g�f�gigg�gfb�a_�^�\ZYWTQM�L�J LMQRTTRQMLIE�B�DB?=�<�:�<�:85�45�7�8:<=?ABDEGIIJLMORVYZ^afiknqtwy�{�y{�~�|�~�|�{|~�����~|{{yy�wy{||~���������~|�{�|�{|�~|{wts�qoli�gfda^ZW�V�TV�WY�Z\_bb�a�b�dfgk�lk�i�k�i�ki�igd�b_�^\�^\WVRQOLL�JIJLO�QOLIGED�B?<�:�8:�<87�5�8�:�<=?B�DEIIJJLMORVYZ^adgklosvw�y{�|�{�|�{�y�{�~�����~|�{�y{|~~�����������~�|�{�|�{�|yvt�s qliggfdba^YWV�T�R�TVW�Y�Z
^addaababbd�b�dfg�k�l�kln�lk lkigfdba_^\\�^\WTRRQML�J�IJLMMLJGE�DB�A?<:�8:<=<:8�7�8:<<=?ABD�EGIJ�LMORVY\^_bfiklqtvv�wy�{�|�{�|{�y{|�~����~|�{|�~���������~||~�|�~|�{�|{wvttsqnkigdba_\YWVTRRTT�RVYYWWY�Z\_bddbbd�bd�b�dfg�i�kln�o�noqqonl onlkifbaa^�\^\WTRQQOMLLJIGGIJJIEDDBB�DBA??=<:�8�:=<<:78:8�:<==?BDEE�G�IJ�LMORVY\^^_bgiiosts�v�w{||�y�|�{�y{|~||~�~��~�{�|�~�������~~�|��~��~�|~|�{ywvttsolkgda_^ZYWVT�R�QRVYY�W YZZ\^abddb�d�bd�b�d fgiggiklnoqqs�q�tqon
qonlkgdbb_^�\ZYVR�Q OMJIGEEGGE�B�DBA?�=<:88�:�<:8:�<=?ABE�I�J�L�MOQRVYZ\\^adfgloqq�stvy{{�y�{�y{�|�|~��~|�{�|�~ ����������~|�{|~��~~���~|{�ywvttsqnkgda^\ZYWVT�RQOOQRVYY�WY\\^_bdff�d�b�df�giknoqqs�t�vtsq
sqnnlkfdda_�^\ZYWVRR�QOLIGEEGGE�ABDBA?�=:�8�:�<�:�=�?ABDEI�L�J�L�M�OQTVYYZ\^_abfklnnoonnoqtwywyywyy�wy{{||{�{|��~||{{�|�{|~~|~�������~|�{|~���~���~�|{y�wvttqonkfda^\ZYWVV�T�R�ORTW�Y Z^^_adfggfdb�d�ba�b dffgiknqsq�tvwyyvtttqonnligfdbaa_^ZYWVTTR�QOMJ�GEBA�?ABBA?==<:�8:<�=�<=?B�DEGIL�M�L�MO�QRVWYYZ\^^_adgik�l�klostvv�w�vwy{||{�{|�~|�{�y{�|~������~|{{�|
~��~||~��~|�{yw�v tsonlifdb_\ZZY�WVTTRRTVY�Z\^__abf�gfdbbdd�b�a
bdffgiknqss�tvy{{ywvtsqonlk�igfda_\ZYWVVTRQQOOL�I�GEBA==�?�A=�<�:<=?=�<=?ADE�GILM�O�M�OQ�TV�WYZ\�^_adfg�i�gknqsttvv�w vttsstwy{|{y�{�|�~�� ~{{yywwy{{|��������~"|{|~~���~||~��~|{yywvttvtqnlkifba^\�ZYW�V WZ\^\\^_aabdf�gfd�ba__abffgilnqttvttvvy{||{wvttqonn�lkifb_^\ZYWWVTRQOOMLJJIGEDA==�?=�<
=?=<<=?ABDG�IJMOQQOO�QRTV�WYZ\�^_adf�g�filoqs�t�v tssqqsvy{{yy�{�|~��~|{yy�wy{~������~||~����~||~��~~|ywvv�t solkkifba^�\^__^^\Z�YZ\^�_abd�f�gfdd�b�dba__abfgiknoqtvvtvwwy{|~|yywvtsqqonlkigb_^\ZZYYWTRQ�OMLLJGEDA�?�=�<=�<�=�? ABEIJJLMOQRRQQ�T VWWYYWWVVWYZ\\�^_abf�dfknoqsqqstssqqooqswyywy�{�|~��~|{�y w{{|�����������~�� ��~||~��~~|y�w vtsqnlkkifba_�^_aa�_�^�\�^ _abbdfggffggf�d�b�db�a�b�giloqqs�vwy{|~�~||{ywwvtsolkigb_^\�ZYVTRQQOMMLJGEDBB�A?�=�<�=�<�=�?�ABDGIJLMOQ�RTVWW�YW�VWYZ\\�^_�bdgknoonno�q�oqt�wy�{|~��~|�{�|~���������~���~���~|{�y wtsqnlkkigdb�a�b�a_�^_bdfg�i�gfddf�d�fd�bdfiiknq�stv�w{~���~�~|{{ywtqlkigb_^ZYYZZYWVRQQOMOLJGG�EDBBA=<<=�<�=�?=�<�=?ABDEGGIJLMOQQRRTVWYYZY�W VWWYY\^\^^�\�_�abdgk�ln�o�nqs�vw�{|~��~|{{�|~�~~|~~��������~���~�|�{ ytsqonlkiiff�bd�fd�ba__^^_bfgklkkiigg�fg�f�dgi�lnq�s tvwyy|~����~�� ~|{yvsnkigda^Z�YWTRRQOOMJ�IGEDBA=<<�=?�A?�=�?ABEGIIJL�M�OQRVWWYZZY�W�Y�Z\�^\�Z\^�_abf�iklnnoon�lnqsttvw{||~��~�|�~�����~���������~����~�|{yvtsqonlkkigdbdf�gf�d baa__abfik�lki�g�i�g�fgkn�oqs�tvw{|~~��������~|{vsnlifdb_\ZZ�YWVTTQ�OL�JIGEDBA=�<=??A�B�?�ABEGIJLMOOMOOQRVWY�Z�YZ\\ZZ\^^�Z�\�^_bd�gikklnnlkllnqsttwy{�~��~�|�������~����������|�~������~�|ywvtqon�lkgddf�g�igffggfbb�abfiikklki�gikki�gikloq�s�t�vwy|�~���������~{vsonifdba_^\ZZYY�WVR�Q
OMMLIEDDBA=�<=?AA�B�A�BDEGILMOQQ�OQRTWY�Z�\�^\ZZ\\�Z\�^_bdf�g�i kllkklnoqstvy{|~���~�|~������~���~~���~�|~�������~�|{ywvso�nkg�f�gikigikigffdbbdf�gikki�g�i�k�iklnoqsv�w�y{|�~���������~|wtonifdbaa_^\\ZYWYYWT�R QOMIEDDBA=�<�=?ABDDB�A�BDEGJMMOOQQOOQRTWY�Z�\�^_^^\�Z\^__�^_abf�g�i�k�lnoqsvwy{|~���|�~���������~~��|�~�|����������~�|ywtq�o
nkigffggikl�klkiggf�d�f�gik�i�k�lnostvy{||�{|{||~����������~|yvqnkgdbaa_�^\Z�YWV�T RQOJGEEDA?�=?AB�D�B�DEGIL�O�QRTWY�Z\�^\�Z�\ ^__^^__abfggi�k�lnosvwy{|~��~�|~��������
����~|{{yy{�|�~���������~~||~~|{wtssqolkiggiik�lk�ig�f�gi�kl�n�oqsvy{|~���~�����������~{yvsolgdb__^�_\Z�YWVVTTVTRQLIEEDBA�?A�B�D�EGJMO�QRVWYYZ�\ZYZZ\\^^\\^_^^_abd�fi�k�i kllnnqtwy{|~��~�|~�������������|ywwvwwy{{|�~ ���������~|~||�~ yvttsqonlk�il�nlikki�gi�klkkl�oq�stvw{~~����������������������|ywvtqnifb_^^�_\�ZYWW�V TRQMJGEDDB�ABDDBBD�E�GILOQ�R�QRTVWY�Z�YZ�YZ\�^�\^__abd�fg�ik�losvy{|�~�|~�����������~{wvttvvwy{|�~��������~�|�~�� |ywwvtsqonlkkl�nl�kigikk�ik�lnoqqsv�wy{|��������������������{wvtsqnkgb_^^_aa^�\�ZYZWWVTRQOMJGEED�BDEDBBDDE�GI�JMQR�TR�QRTTW�YWVVWWYYZ\�^�\^_a�dfd�f�g�igi�knosw{|~||�{�|�����������~|{vtssvvwy{|�~ �����������|�~�� �~|{{wvtssqn�l�n�l�k igkllkklln�l�noqstvy�{|~�����������������������{wtsqonlgb�_�a_�^�\ZYWVTRRQMJIGEDDEDDEGE�DEI�JLMMOR�TR�QR�Q�RTV�WVTTVWYYZ\�^�\^_bff�d�f�d fgiiggiiklnqvy
{||{yy{|~����������~||{wvttvwy{|�~�����������~||~�����~{w�vtqonn�l�n�lk�ik�l�n�oqstw{|~������������������������~yvsqonnlgba�_�a�_^_^\�ZYWVTRQMLI�G�IGEEGGIJ�LMOQR�TR�QR�Q�R�Q�RTVV�TVWWZZ�\^\\^ad�f�dfd�b dgigfgiiklnqty{||�{�|~�����������~|yy�wy{|�~
�������������������~{�ywtqon�lnl�kigi�kl�n�o qstvw{���������������������������~yvsqnllkgdba�_�a^\\�^\YWVTROL�J�LJ�I�JL�MOR�TRQQ�R�Q�RQ�OQR�TVW�Y�Z�\^_bd�fd�b dgigfgikllnqtwy�{|�~����������~�|{yy{{|~���������������������~�|{wsqonllnlkiiggi�kl�n oqsstvwy|������������������������������~{vsqnkkigfdbaa_aabdbba_^^�a_^ZYWTRO�M�OM�L�MOQOOQRTVV�TRQ�R�QRTRO�MOQTTVTVV�W�VWYZ\^abd�fdbabdgigffgklnosstvwy{|�~|~�����������~|�{ |~�������������������� ������|yvsoon�l kggfggikkl�noqstvwy|~�����������������������������~ {wtqnkiiggffdd�bdffdb�a bddba_^ZWVTRQQ�R�QRQQRTRRTV�W�V�T�R�TROM�LMORTVV�W
VTTVWZ^_aab�dbabdf�g�filoq�stvw{�|�~�|~�������������~||~��������������������������~{wtqoonllkgffggikln�oqstvy|~�����������������������������~||{{yvsqnlikii�g�fdffggddbbdfgfdba_ZYWWVV�W�T
VTTVWVVWYZZ�YWVV�TQML�JLMORT�VTVWY\^_�a�b�d�b�a�bdfgffilo�qstvw�{�| {|{|~����������������� ����������������������������|wtqoonlki�f�gklnoq�stvy|�����������������������������������
~|{yywvsqon�l�ki�g�igf�dgigffdb_^�\ZW�VW�Y�Z\^^�\�^\YW�V TRQMJIIJJLMQR�T�VWYZ^_�a�ba�_ abdffgiknooqsvww�y�{�|~������������������������������� �����~yvso�nkg�fgiloqst�vwy|������������������������������� ~|{ywwvtsq�o�l�nl�k�i�fiki�gfb�a�_^Z�YZ\�^�_�a _^ZYWWVTRQOLJI�JLOR�TVWYZ\_ab�a_�a_^^\^^_abdfggiknnqstvvww�v�w y{||~����������������������������������������{wtqnnlki�giknqstvwwyy{����������������������������������~|{y�wvt�sq�on�lkii�gikk�igf�d ba_^^\\^_abd�f�d�f�d ba^\ZYWTRQOML�JLOR�TVYZ\^_a�ba�_ ^\Z\^_aabf�gilnoqsttvv�t�vwy{{|~�������������������������������'���~yvsonlkkiiklnqstvwwy{|~������������������������������ ��~|{yywwv�t�s�qo�n�l�kigg�i�ki�gfb�a�_abdfi�k�g�f�g�f db_^\ZYVTQMLJJ�IJMQR�TVYZ\^_a�ba__�^�\�^�_ bfggfgklnq�s�t�s tvvwwyy{{||����������������������������������{wtqonllkklnostvwyy{|������������������������������������ ���~~|{yywwvv�tsqonn�lk�ikllk�if�d�bdfgilnonk�i�g
fda_^\ZYVQL�IJMQR�TVWYZ\^a�b�a_^\\�^
_bfggfgiklo�q�st�v�wy{~�����������������������������|yvtq�o�noqstvwy{{|~�����������������������������������������~~|{yywv�wvtson�l�k�l�k�ikg�f�gkno�qn�lkiiggfdba_^ZYVQLIG�IJMQR�T�VWYZ\^_�b�a_^�\^�_�^
_bdfgfgiikl�o�n�qstt�s�twy|~����������������~ ��������������~|{ywts�q
sttvwy{|~��������������������������������������������~|{�ywvtqon�lkiiklk�i�knq�sq�onlkigfddba_\YVQMJ�IJLMQRTTVWWYZ\\^_a�ba_^�\^�_�^_abdff�gi�l�noqsqoo�qsvy{|�~�|~���~����~||�{|~����������~�|{ywv�tv�wy{~��������������������������������������������������|�{ywvtson�l�n�lkiklonn�l�nqt�vtssqonlki�g fba^YVROML�J LMORTTVWWY\^^�_
bddba_^ZZ\^�_\^^_a�bdfddf�i�k�n�o�n�oqtwwy�{�|�ywyy{|�{|~�~|y{�wy{|~������~�|�{|~|{ywwyy�{�|�������� ��������������������������������� ���|{{wvttsqon�ln�onll�klo�q�o�qstvw�ywvtqonnl�k
ifb_ZWTRQQM�LMORT�VWZ^_aa__addba_\YZ\�^�\^�_a�bdfg�i�kl�noqstv�wy�{ywv�tv�wy{|{yww�vwy|~~��~�|{�y{|~|{yy{�~������������������������������������������������������~|{wvttsqoo�no�q�o�lklnoqq�sqstvwy{{�|{ywt�qo�nlid_\YWWVTQOMMLMOT�VW\_abba_abba_^ZYZ\^�\�Z�\�^_aabbdf�gik�lnoqst�v�wvtss�qs�tvwwv�t vtvw{|{|{{�y�{ywwy{�|{|~����������������������������������������������������� ����~{ywvvtsqq�oq�sq�onllnoqss�tvwy{�|~��~|{w�tsqqonkfa^\ZZYWVTQOMOQT�VY^_abba__aa_^\ZYZ�\Z�Y�Z�\^_aaabd�fgi�klnoqstt�vts�q�o�qstts�qs�tv�yw�vw�y�wy{�|�~������������� ������������������������������������� �����~||{yvtst�q�s�q�onllnostt�v�wy{||�~���~|{�w�vtonlgba_�\ZYWTR�QRTTVVY\_�a_^^�_\ZZY�Z�\�ZY�W�Y�Z�^�_abddbddf�gi�kloqqss�tsqooq�o�q�oqsst�vwv�t�v�w vwwy{|~���������������������������������
���������������������������������|ywvvttssqq�o�nosv�wy{|�~�������~|�{ yvqnlifdb_�^\YWWVT�R TVWYZ^__^\Z\�^Z�YZ\\ZYY�W�YZ�^_bddbabd�fg�klo�q�sq�o�q�o�nonnoq�st�v�t�v�w
y{~����������������������������������������������������
��������������~{w�vtqqoonnoqoonnosv�y{|����������������
~{wsoligffb�a ^\Z\YWTRRTVWYZ�\ ZYYZ\\ZYWW�Y�Z�Y
WYYZYYZ\^_a�dbabb�d�fikllno�qo�q�oq�o noonnllklnnlln�oqsst�v�t�v wy|��������������������������������� �������������������������������������~{�wvsqoonno�q�oqtwy�{|~������������~{vql�igfdba�_\YV�TVWY�ZY�W�YWVVW�YZ\\�Z\^ab�d�b�d�fgk�ln�o�n�o�n�onlkiik�l�noqqsvww�v w{~�������������������������������� ���������������������� ������������|y�wvsqoonnooqqoqsvy{�|~����������������~wso�lkif�d�b^ZWV�TVWYY�ZY�V�T VWYYWWYYZZ^^�\^bd�d�b�dfgi�klnn�l�n�o nllnnoonkiggii�kl�n�oqsvww�vw|�������������������������������������������������������������������������|ywvtssqo�noqqstw{|�~������������������ytsq�onli�gfd_\ZYV�TVWY�ZYVTT�R�TVWYWWYZ\\�^_bd�d�bdffgikk�i�k�i�klnonlkkl�nli�g�ikln�oqsvww�v y|���������� ������������
���������������
������������������/����������������������|yvtssqonnlloqtvwy{|~~��������������������|wvsqqsqnl�kifb_\ZWVTTVWYZZYYWTR�Q�RTVWVWYZ^^�_�a�_�b�bdbbdd�fgikki�g�f giknlkigikllk�f�gilo�qstvww�v
wy|����������������������������������������������� �������������� �����������{wt�sqonllosvy�{|~��������%��������������{wtsstsqonnlkgda^\YWVVWY�Z�YWTR�Q�R�T�VWYZ^�_abb�a�a�bd�fg�igff�d�bdfg�igffgiig�dfggiloq�stvwyyw�v wy{|������������������������������������������������������������������������|ywt�so�nosv{�|~����������������������~{w�v tsqqnkgdb__Z�YWVTR�Q�RTVWYZ\�^_bdbba_�_�a�b�d�fgiigfdb�ab�a�b�d�f�d�fd�bdfggikoq�tw�y�w y|~������������������������������~~��
�����������������������������������������|{w�tq�o qsv{|~������������� �����������|{y�w
vtsokgdbaa^�\Z�YV�TRQQ�R�QRTVWY�Z\^a�ba_�_�abdffggfba�_�a�_ab�db�a�b dfggiknqtvvy�{�y |��������������������������������~ ���������������!����������������������������|yvvts�q stw|~��������������� �������~|{yy�wvtqkgfdba_^__^\ZYYWV�T�RQ�OQRVWW�YZ\^_�a^�^_^^_abbddb_^\\^�\^__^�Z\^abb_^\\^^abddfgiknqtvwy{�|�{ |~���������������������� ���������������||{||������������������������������������������~{ywv�t vy~������������
�������|{yy�wvtqligfdb�a_^\ZYWV�TRQO�MOQTVVW�YZ\^�_^�\�^�\�^_aa_^\�Z�Y#Z\\ZWVVWY\^^\ZYYZ\_bddfgklnqtwy{|~���~ ������������������������������|{y{|����������������������������������������|{{y�v w{�������������� ��������|{yy�wvtsnkg�f�d
ba_^\YYWVTR�TQO�M�ORTVWWYYZ\�^_^�\�Z\Z�\�Z�YW�V WYYWTRRTVW�Y�W#Y\_abdfgknosvy{|~�������������������������� �����������������~{{y{|��������������������������$�������������������~~|ywwyy{~����������������
��������|{y�wvtsoli�g�f dba^\ZZYWT�RQOMM�OQRVWWYZ\\�^�^\�Z�YWT�RTVVTQOOQ�R�TVWY\_abdfilosvy|~������������������������������������������������|�{ |~��������������������������������������������~|{{||~������������������������������|{w�vwvtsqoki�g�fba^\�ZYWTR�Q�OM�O�QTVVYZ\Z�\�^\�ZYW�V�WTQ�OQRQOO�MOQTTWZ_abdgilotw{~����������������������������������������������| ~���������������������� ��������������
�������������������������������������������~{wvttvvtssqnkig�fb_^\�ZYVR�Q�O�QRTVY�Z\^^\�ZYV�T�VTQOMM�L�MLJIIJJLMQRVY^abfiknqvy|���������������������������������������������~ ������������������������������������������������������������������������� ����������{wv�t�sonli�fb_^\�ZYWVR�QRVY�Z�Y�Z�\�ZYTRTRR�TRQOMLJJ�I�JIEEDGGJLMQVY\_bfiloty|��������������������������������������������������������������������������������������������������������������������� ����������|y�vt�s qonkgfddb_\Z�YWVTRR�Q�R�QRVY�Z�YZ\\�\�ZYVTT�R�QOMLJIG�ED�BDEIJLQVY\_bfknsw|������������������������������� ������������������ ���������������
������������������������ �����������������������������������������|ywvvt�sqnkigba_^ZYWYWWVT�R�TR�QRVY�Z�YZ\^�^\�ZYWVTRR�Q�OMJGED�B�ABDEGILOTY\adgloty~�����������������������������������������������������������������������������������������������������������������������������������������|{ywvtt�s qnkigb_^\Y�WV�T�VT�R
TVYZ\\ZZ\^_�_^\�ZYVTTQ�OMLIEDA�?�=?ABDEGILOTY^bfinqv{�������������������������������������������������������������������������������������� ��������������������������������������������~{{wvtsst�s
qnkifa_^\YW�V�WVWVWW�V�TVWZ�\^a�a�_�^-\WVTRQQOOLLGDB??==<==?ABDEIMQVZadginqv{����������������������������� ����������������������������������������
����������������������������������������/�����������������������|{ywtstvtssqnkgda_^\YWVTV�W�YW�VWY\�^_a�a�_�a_^ZWVTTRQOLJGDA??�= ?ABDEJORW^bfgkosw|������������������������������������������������������������������� �����������������������������������������������&�����������������|{ywtstvtssolifda_^\YW�VWYZYW�V�WYZ^�_a�b�a�ba_\YVTVTROJIEDA�?�=!<=ABDGLRVZ_bfglqty~��������������������������������������������������������� ��������������

88
Assets/TestScenes/HDTest/GraphicTest/Common/Dragon/Dragon_specular.psd.meta


fileFormatVersion: 2
guid: 53cf1b46cfd6ff347aad6fd4c6e1ea1e
timeCreated: 1490775966
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -1
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Standalone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: PS4
maxTextureSize: 2048
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/TestScenes/HDTest/GraphicTest/SSS.meta


fileFormatVersion: 2
guid: 5b138ce4bb2634640802ec8b652c4d13
folderAsset: yes
timeCreated: 1493290941
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

197
Assets/TestScenes/HDTest/GraphicTest/Two Sided/Material/GroundLeaf_DoubleSidedFlipSSS.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: GroundLeaf_DoubleSidedFlipSSS
m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
m_ShaderKeywords: _ALPHATEST_ON _DOUBLESIDED_ON _MASKMAP _NORMALMAP _NORMALMAP_TANGENT_SPACE
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_CustomRenderQueue: 2450
stringTagMap:
RenderType: TransparentCutout
disabledShaderPasses:
- DistortionVectors
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AnisotropyMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseColorMap:
m_Texture: {fileID: 2800000, guid: 00447c5eeb984f54d92c80818840a36b, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 2800000, guid: 0c3144d154991884c8aa53e7dc7893ff, type: 3}
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}
- _DetailMap:
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}
- _DiffuseLightingMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortionVectorMap:
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}
- _EmissiveColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _HeightMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 00447c5eeb984f54d92c80818840a36b, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskMap:
m_Texture: {fileID: 2800000, guid: b24f69ff4ace9194fb0d9eee4f5cf1a4, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 2800000, guid: b24f69ff4ace9194fb0d9eee4f5cf1a4, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 2800000, guid: 0c3144d154991884c8aa53e7dc7893ff, type: 3}
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}
- _SpecularOcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubSurfaceRadiusMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubsurfaceRadiusMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _AlphaCutoff: 0.5
- _AlphaCutoffEnable: 1
- _Anisotropy: 0
- _BlendMode: 0
- _BumpScale: 1
- _CullMode: 0
- _Cutoff: 0.5
- _DepthOffsetEnable: 0
- _DetailAOScale: 1
- _DetailAlbedoScale: 1
- _DetailHeightScale: 1
- _DetailMapMode: 0
- _DetailNormalMapScale: 1
- _DetailNormalScale: 1
- _DetailSmoothnessScale: 1
- _DistortionDepthTest: 0
- _DistortionEnable: 0
- _DistortionOnly: 0
- _DoubleSidedEnable: 1
- _DoubleSidedMirrorEnable: 1
- _DoubleSidedMode: 2
- _Drag: 1
- _DstBlend: 0
- _EmissiveColorMode: 1
- _EmissiveIntensity: 0
- _EnablePerPixelDisplacement: 0
- _EnableWind: 0
- _GlossMapScale: 0.892
- _Glossiness: 0.507
- _GlossyReflections: 1
- _HeightAmplitude: 0.32
- _HeightBias: 0
- _HeightCenter: 0.68
- _HeightMapMode: 0
- _HeightScale: 1
- _HorizonFade: 1
- _InitialBend: 1
- _MaterialID: 1
- _Metalic: 0
- _Metallic: 0
- _Mode: 1
- _NormalMapSpace: 0
- _NormalScale: 1
- _OcclusionStrength: 1
- _PPDLodThreshold: 5
- _PPDMaxSamples: 15
- _PPDMinSamples: 5
- _Parallax: 0.02
- _ShiverDirectionality: 0.5
- _ShiverDrag: 0.2
- _Smoothness: 0.5
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _StencilRef: 1
- _Stiffness: 1
- _SubsurfaceProfile: 0
- _SubsurfaceRadius: 1
- _SurfaceType: 0
- _TessellationBackFaceCullEpsilon: -0.375
- _TessellationFactor: 4
- _TessellationFactorMaxDistance: 50
- _TessellationFactorMinDistance: 20
- _TessellationFactorTriangleSize: 100
- _TessellationMode: 1
- _TessellationObjectScale: 0
- _TessellationShapeFactor: 0.75
- _TexWorldScale: 1
- _Thickness: 0.5
- _UVBase: 0
- _UVDetail: 0
- _UVMappingPlanar: 0
- _UVSec: 0
- _ZTestMode: 8
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 0.5882353, g: 0.5882353, b: 0.5882353, a: 1}
- _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}

8
Assets/TestScenes/HDTest/GraphicTest/Two Sided/Material/GroundLeaf_DoubleSidedFlipSSS.mat.meta


fileFormatVersion: 2
guid: 943c7c930eb495d4486788572dc49a12
timeCreated: 1460562588
licenseType: Pro
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

8
Assets/TestScenes/HDTest/NewBatcherBench1.unity.meta


fileFormatVersion: 2
guid: efeef759b5144ef4fa1cfc182ddbaea5
timeCreated: 1493136714
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/TestScenes/HDTest/NewBatcherTest.meta


fileFormatVersion: 2
guid: 01a0eae0646089f489a0047dc8afb564
folderAsset: yes
timeCreated: 1493224766
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

37
Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/FoliageSSSProfile.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a6e7465350bf0d248b4799d98e18cd24, type: 3}
m_Name: FoliageSSSProfile
m_EditorClassIdentifier:
stdDev1: {r: 0.27931032, g: 1, b: 0.050000012, a: 0}
stdDev2: {r: 0.3010142, g: 0.8235294, b: 0.05, a: 0}
lerpWeight: 0.5
texturingMode: 0
enableTransmission: 1
tintColor: {r: 1, g: 1, b: 1, a: 1}
thicknessRemap: {x: 0, y: 0.2873168}
settingsIndex: 0
m_FilterKernel:
- {x: 0.28517896, y: 0.09090909, z: 0.9996764, w: -0.00000009903661}
- {x: 0.22566724, y: 0.09090909, z: 0.00016186091, w: -0.209237}
- {x: 0.10604589, y: 0.09090909, z: 8.6876086e-17, w: -0.43068767}
- {x: 0.024215871, y: 0.09090909, z: 5.8571e-41, w: -0.6816498}
- {x: 0.0014802383, y: 0.09090909, z: 0, w: -1.0000685}
- {x: 0.0000013396462, y: 0.09090909, z: 0, w: -1.5417894}
- {x: 0.22566712, y: 0.09090909, z: 0.00016185877, w: 0.20923716}
- {x: 0.10604589, y: 0.09090909, z: 8.6876086e-17, w: 0.43068767}
- {x: 0.02421585, y: 0.09090909, z: 5.857e-41, w: 0.6816499}
- {x: 0.0014802383, y: 0.09090909, z: 0, w: 1.0000685}
- {x: 0.0000013396391, y: 0.09090909, z: 0, w: 1.5417898}
m_HalfRcpVariances:
- {x: 6.4090853, y: 0.5, z: 199.99991}
- {x: 5.518182, y: 0.7372449, z: 200}
m_HalfRcpWeightedVariances: {x: 5.9386554, y: 0.60145676, z: 199.99997, w: 0.60145676}

9
Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/FoliageSSSProfile.asset.meta


fileFormatVersion: 2
guid: d6ee4403015766f4093158d69216c0bf
timeCreated: 1493161911
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

37
Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/SkinSSSProfile.asset


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a6e7465350bf0d248b4799d98e18cd24, type: 3}
m_Name: SkinSSSProfile
m_EditorClassIdentifier:
stdDev1: {r: 0.22794116, g: 0.17430794, b: 0.17430794, a: 0}
stdDev2: {r: 1, g: 0.05, b: 0.05, a: 0}
lerpWeight: 0.5
texturingMode: 1
enableTransmission: 0
tintColor: {r: 1, g: 1, b: 1, a: 1}
thicknessRemap: {x: 0, y: 2.04}
settingsIndex: 1
m_FilterKernel:
- {x: 0.09090909, y: 0.5992897, z: 0.5992897, w: -0.00000006668997}
- {x: 0.09090909, y: 0.12275139, z: 0.12275139, w: -0.14089748}
- {x: 0.09090909, y: 0.061923057, z: 0.061923057, w: -0.2900195}
- {x: 0.09090909, y: 0.015196559, z: 0.015196559, w: -0.45901415}
- {x: 0.09090909, y: 0.0004841472, z: 0.0004841472, w: -0.6734332}
- {x: 0.09090909, y: 0.000000024399057, z: 0.000000024399057, w: -1.0382211}
- {x: 0.09090909, y: 0.122751325, z: 0.122751325, w: 0.1408976}
- {x: 0.09090909, y: 0.061923057, z: 0.061923057, w: 0.2900195}
- {x: 0.09090909, y: 0.015196541, z: 0.015196541, w: 0.45901427}
- {x: 0.09090909, y: 0.0004841472, z: 0.0004841472, w: 0.6734332}
- {x: 0.09090909, y: 0.000000024398872, z: 0.000000024398872, w: 1.0382214}
m_HalfRcpVariances:
- {x: 9.623311, y: 16.45643, z: 16.45643}
- {x: 0.5, y: 200, z: 200}
m_HalfRcpWeightedVariances: {x: 1.3264011, y: 39.750328, z: 39.750328, w: 1.3264011}

9
Assets/ScriptableRenderPipeline/HDRenderPipeline/SSSProfile/SkinSSSProfile.asset.meta


fileFormatVersion: 2
guid: 906339bac2066fc4aa22a3652e1283ef
timeCreated: 1493291209
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

288
Assets/ScriptableRenderPipeline/common/Debugging/DebugActionManager.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.Experimental.Rendering
{
public class DebugActionManager
{
static private DebugActionManager s_Instance = null;
static public DebugActionManager instance
{
get
{
if (s_Instance == null)
s_Instance = new DebugActionManager();
return s_Instance;
}
}
private static string kEnableDebugBtn1 = "Enable Debug Button 1";
private static string kEnableDebugBtn2 = "Enable Debug Button 2";
private static string kDebugPreviousBtn = "Debug Previous";
private static string kDebugNextBtn = "Debug Next";
private static string kValidateBtn = "Debug Validate";
private static string kPersistentBtn = "Debug Persistent";
private static string kDPadVertical = "Debug Vertical";
private static string kDPadHorizontal = "Debug Horizontal";
private string[] m_RequiredInputButtons = { kEnableDebugBtn1, kEnableDebugBtn2, kDebugPreviousBtn, kDebugNextBtn, kValidateBtn, kPersistentBtn, kDPadVertical, kDPadHorizontal };
public enum DebugAction
{
EnableDebugMenu,
PreviousDebugMenu,
NextDebugMenu,
Validate,
Persistent,
MoveVertical,
MoveHorizontal,
DebugActionCount
}
enum DebugActionRepeatMode
{
Never,
Delay
}
class DebugActionDesc
{
public List<string[]> buttonTriggerList = new List<string[]>();
public string axisTrigger = "";
public List<KeyCode[]> keyTriggerList = new List<KeyCode[]>();
public DebugActionRepeatMode repeatMode = DebugActionRepeatMode.Never;
public float repeatDelay = 0.0f;
}
class DebugActionState
{
enum DebugActionKeyType
{
Button,
Axis,
Key
}
DebugActionKeyType m_Type;
string[] m_PressedButtons;
string m_PressedAxis = "";
KeyCode[] m_PressedKeys;
bool[] m_TriggerPressedUp = null;
float m_Timer;
bool m_RunningAction = false;
float m_ActionState = 0.0f;
public bool runningAction { get { return m_RunningAction; } }
public float actionState { get { return m_ActionState; } }
public float timer{ get { return m_Timer; } }
private void Trigger(int triggerCount, float state)
{
m_ActionState = state;
m_RunningAction = true;
m_Timer = 0.0f;
m_TriggerPressedUp = new bool[triggerCount];
for (int i = 0; i < m_TriggerPressedUp.Length; ++i)
m_TriggerPressedUp[i] = false;
}
public void TriggerWithButton(string[] buttons, float state)
{
m_Type = DebugActionKeyType.Button;
m_PressedButtons = buttons;
m_PressedAxis = "";
Trigger(buttons.Length, state);
}
public void TriggerWithAxis(string axis, float state)
{
m_Type = DebugActionKeyType.Axis;
m_PressedAxis = axis;
Trigger(1, state);
}
public void TriggerWithKey(KeyCode[] keys, float state)
{
m_Type = DebugActionKeyType.Key;
m_PressedKeys = keys;
m_PressedAxis = "";
Trigger(keys.Length, state);
}
private void Reset()
{
m_RunningAction = false;
m_Timer = 0.0f;
m_TriggerPressedUp = null;
}
public void Update(DebugActionDesc desc)
{
// Always reset this so that the action can only be caught once until repeat/reset
m_ActionState = 0.0f;
if (m_TriggerPressedUp != null)
{
m_Timer += Time.deltaTime;
for(int i = 0 ; i < m_TriggerPressedUp.Length ; ++i)
{
if (m_Type == DebugActionKeyType.Button)
m_TriggerPressedUp[i] |= Input.GetButtonUp(m_PressedButtons[i]);
else if(m_Type == DebugActionKeyType.Axis)
m_TriggerPressedUp[i] |= (Input.GetAxis(m_PressedAxis) == 0.0f);
else
m_TriggerPressedUp[i] |= Input.GetKeyUp(m_PressedKeys[i]);
}
bool allTriggerUp = true;
foreach (bool value in m_TriggerPressedUp)
allTriggerUp &= value;
if(allTriggerUp || (m_Timer > desc.repeatDelay && desc.repeatMode == DebugActionRepeatMode.Delay))
{
Reset();
}
}
}
}
bool m_Valid = false;
DebugActionDesc[] m_DebugActions = null;
DebugActionState[] m_DebugActionStates = null;
DebugActionManager()
{
m_Valid = Debugging.CheckRequiredInputButtonMapping(m_RequiredInputButtons);
m_DebugActions = new DebugActionDesc[(int)DebugAction.DebugActionCount];
m_DebugActionStates = new DebugActionState[(int)DebugAction.DebugActionCount];
DebugActionDesc enableDebugMenu = new DebugActionDesc();
enableDebugMenu.buttonTriggerList.Add(new[] { kEnableDebugBtn1, kEnableDebugBtn2 });
enableDebugMenu.keyTriggerList.Add(new[] { KeyCode.LeftControl, KeyCode.Backspace });
enableDebugMenu.repeatMode = DebugActionRepeatMode.Never;
AddAction(DebugAction.EnableDebugMenu, enableDebugMenu);
DebugActionDesc nextDebugMenu = new DebugActionDesc();
nextDebugMenu.buttonTriggerList.Add(new[] { kDebugNextBtn });
nextDebugMenu.repeatMode = DebugActionRepeatMode.Never;
AddAction(DebugAction.NextDebugMenu, nextDebugMenu);
DebugActionDesc previousDebugMenu = new DebugActionDesc();
previousDebugMenu.buttonTriggerList.Add(new[] { kDebugPreviousBtn });
previousDebugMenu.repeatMode = DebugActionRepeatMode.Never;
AddAction(DebugAction.PreviousDebugMenu, previousDebugMenu);
DebugActionDesc validate = new DebugActionDesc();
validate.buttonTriggerList.Add(new[] { kValidateBtn });
validate.repeatMode = DebugActionRepeatMode.Delay;
validate.repeatDelay = 0.25f;
AddAction(DebugAction.Validate, validate);
DebugActionDesc persistent = new DebugActionDesc();
persistent.buttonTriggerList.Add(new[] { kPersistentBtn });
persistent.repeatMode = DebugActionRepeatMode.Never;
AddAction(DebugAction.Persistent, persistent);
AddAction(DebugAction.MoveVertical, new DebugActionDesc { axisTrigger = kDPadVertical, repeatMode = DebugActionRepeatMode.Delay, repeatDelay = 0.2f } );
AddAction(DebugAction.MoveHorizontal, new DebugActionDesc { axisTrigger = kDPadHorizontal, repeatMode = DebugActionRepeatMode.Delay, repeatDelay = 0.2f } );
}
void AddAction(DebugAction action, DebugActionDesc desc)
{
int index = (int)action;
m_DebugActions[index] = desc;
m_DebugActionStates[index] = new DebugActionState();
}
void SampleAction(int actionIndex)
{
DebugActionDesc desc = m_DebugActions[actionIndex];
DebugActionState state = m_DebugActionStates[actionIndex];
//bool canSampleAction = (state.actionTriggered == false) || (desc.repeatMode == DebugActionRepeatMode.Delay && state.timer > desc.repeatDelay);
if(state.runningAction == false)
{
// Check button triggers
for (int buttonListIndex = 0; buttonListIndex < desc.buttonTriggerList.Count; ++buttonListIndex)
{
string[] buttons = desc.buttonTriggerList[buttonListIndex];
bool allButtonPressed = true;
foreach (string button in buttons)
{
allButtonPressed = allButtonPressed && Input.GetButton(button);
if (!allButtonPressed)
break;
}
if (allButtonPressed)
{
state.TriggerWithButton(buttons, 1.0f);
break;
}
}
// Check axis triggers
if(desc.axisTrigger != "")
{
float axisValue = Input.GetAxis(desc.axisTrigger);
if(axisValue != 0.0f)
{
state.TriggerWithAxis(desc.axisTrigger, axisValue);
}
}
// Check key triggers
for (int keyListIndex = 0; keyListIndex < desc.keyTriggerList.Count; ++keyListIndex)
{
KeyCode[] keys = desc.keyTriggerList[keyListIndex];
bool allKeyPressed = true;
foreach (KeyCode key in keys)
{
allKeyPressed = allKeyPressed && Input.GetKey(key);
if (!allKeyPressed)
break;
}
if (allKeyPressed)
{
state.TriggerWithKey(keys, 1.0f);
break;
}
}
}
}
void UpdateAction(int actionIndex)
{
DebugActionDesc desc = m_DebugActions[actionIndex];
DebugActionState state = m_DebugActionStates[actionIndex];
if(state.runningAction)
{
state.Update(desc);
}
}
public void Update()
{
if (!m_Valid)
return;
for(int actionIndex = 0 ; actionIndex < m_DebugActions.Length ; ++actionIndex)
{
UpdateAction(actionIndex);
SampleAction(actionIndex);
}
}
public float GetAction(DebugAction action)
{
return m_DebugActionStates[(int)action].actionState;
}
}
}

12
Assets/ScriptableRenderPipeline/common/Debugging/DebugActionManager.cs.meta


fileFormatVersion: 2
guid: 7e580489e9758c4429e4048beba3792e
timeCreated: 1492088391
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

292
Assets/ScriptableRenderPipeline/common/Debugging/DebugItemDrawer.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace UnityEngine.Experimental.Rendering
{
public class DebugItemDrawer
{
protected DebugMenuItem m_MenuItem = null;
// Label for simple GUI items
protected GUIContent m_Label;
protected List<GUIContent> m_EnumStrings = null;
protected List<int> m_EnumValues = null;
public DebugItemDrawer()
{
}
public void SetDebugItem(DebugMenuItem item)
{
m_MenuItem = item;
m_Label = new GUIContent(m_MenuItem.name);
Type itemType = m_MenuItem.GetItemType();
if(itemType.BaseType == typeof(System.Enum))
{
Array arr = Enum.GetValues(itemType);
m_EnumStrings = new List<GUIContent>(arr.Length);
m_EnumValues = new List<int>(arr.Length);
foreach(var value in arr)
{
m_EnumStrings.Add(new GUIContent(value.ToString()));
m_EnumValues.Add((int)value);
}
}
}
public virtual void ClampValues(Func<object> getter, Action<object> setter) {}
public virtual DebugMenuItemUI BuildGUI(GameObject parent, DebugMenuItem menuItem)
{
DebugMenuItemUI newItemUI = null;
if (menuItem.GetItemType() == typeof(bool))
{
newItemUI = new DebugMenuBoolItemUI(parent, menuItem, m_Label.text);
}
else if (menuItem.GetItemType() == typeof(int))
{
newItemUI = new DebugMenuIntItemUI(parent, menuItem, m_Label.text);
}
else if (menuItem.GetItemType() == typeof(uint))
{
newItemUI = new DebugMenuUIntItemUI(parent, menuItem, m_Label.text);
}
else if (menuItem.GetItemType() == typeof(float))
{
newItemUI = new DebugMenuFloatItemUI(parent, menuItem, m_Label.text);
}
else if (menuItem.GetItemType() == typeof(Color))
{
newItemUI = new DebugMenuColorItemUI(parent, menuItem, m_Label.text);
}
else if (m_MenuItem.GetItemType().BaseType == typeof(System.Enum))
{
newItemUI = new DebugMenuEnumItemUI(parent, menuItem, m_Label.text, m_EnumStrings.ToArray(), m_EnumValues.ToArray());
}
return newItemUI;
}
#if UNITY_EDITOR
bool DrawBoolItem()
{
bool value = (bool)m_MenuItem.GetValue();
if (m_MenuItem.readOnly)
{
EditorGUILayout.LabelField(m_Label, new GUIContent(value.ToString()));
}
else
{
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.Toggle(m_Label, value);
if (EditorGUI.EndChangeCheck())
{
m_MenuItem.SetValue(value);
return true;
}
}
return false;
}
bool DrawIntItem()
{
int value = (int)m_MenuItem.GetValue();
if (m_MenuItem.readOnly)
{
EditorGUILayout.LabelField(m_Label, new GUIContent(value.ToString()));
}
else
{
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.IntField(m_Label, value);
if (EditorGUI.EndChangeCheck())
{
m_MenuItem.SetValue(value);
return true;
}
}
return false;
}
bool DrawUIntItem()
{
int value = (int)(uint)m_MenuItem.GetValue();
if (m_MenuItem.readOnly)
{
EditorGUILayout.LabelField(m_Label, new GUIContent(value.ToString()));
}
else
{
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.IntField(m_Label, value);
if (EditorGUI.EndChangeCheck())
{
value = System.Math.Max(0, value);
m_MenuItem.SetValue((uint)value);
return true;
}
}
return false;
}
bool DrawFloatItem()
{
float value = (float)m_MenuItem.GetValue();
if(m_MenuItem.readOnly)
{
EditorGUILayout.LabelField(m_Label, new GUIContent(value.ToString()));
}
else
{
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.FloatField(m_Label, value);
if (EditorGUI.EndChangeCheck())
{
m_MenuItem.SetValue(value);
return true;
}
}
return false;
}
bool DrawColorItem()
{
EditorGUI.BeginChangeCheck();
Color value = EditorGUILayout.ColorField(m_Label, (Color)m_MenuItem.GetValue());
if (EditorGUI.EndChangeCheck())
{
m_MenuItem.SetValue(value);
return true;
}
return false;
}
bool DrawEnumItem()
{
EditorGUI.BeginChangeCheck();
int value = EditorGUILayout.IntPopup(m_Label, (int)m_MenuItem.GetValue(), m_EnumStrings.ToArray(), m_EnumValues.ToArray());
if (EditorGUI.EndChangeCheck())
{
m_MenuItem.SetValue(value);
return true;
}
return false;
}
public virtual bool OnEditorGUI()
{
if (m_MenuItem.GetItemType() == typeof(bool))
{
return DrawBoolItem();
}
else if (m_MenuItem.GetItemType() == typeof(int))
{
return DrawIntItem();
}
else if(m_MenuItem.GetItemType() == typeof(uint))
{
return DrawUIntItem();
}
else if (m_MenuItem.GetItemType() == typeof(float))
{
return DrawFloatItem();
}
else if (m_MenuItem.GetItemType() == typeof(Color))
{
return DrawColorItem();
}
else if (m_MenuItem.GetItemType().BaseType == typeof(System.Enum))
{
return DrawEnumItem();
}
return false;
}
#endif
}
public class DebugItemDrawFloatMinMax
: DebugItemDrawer
{
float m_Min = 0.0f;
float m_Max = 1.0f;
public DebugItemDrawFloatMinMax(float min, float max)
{
m_Min = min;
m_Max = max;
}
public override void ClampValues(Func<object> getter, Action<object> setter)
{
if (m_MenuItem == null)
return;
if(m_MenuItem.GetItemType() == typeof(float))
{
setter(Mathf.Clamp((float)getter(), m_Min, m_Max));
}
}
#if UNITY_EDITOR
public override bool OnEditorGUI()
{
EditorGUI.BeginChangeCheck();
float value = EditorGUILayout.Slider(m_MenuItem.name, (float)m_MenuItem.GetValue(), m_Min, m_Max);
if (EditorGUI.EndChangeCheck())
{
m_MenuItem.SetValue(value);
return true;
}
return false;
}
#endif
}
public class DebugItemDrawerIntEnum
: DebugItemDrawer
{
GUIContent[] m_EnumStrings = null;
int[] m_EnumValues = null;
public DebugItemDrawerIntEnum(GUIContent[] enumStrings, int[] enumValues)
{
m_EnumStrings = enumStrings;
m_EnumValues = enumValues;
}
public override DebugMenuItemUI BuildGUI(GameObject parent, DebugMenuItem menuItem)
{
return new DebugMenuEnumItemUI(parent, menuItem, m_Label.text, m_EnumStrings, m_EnumValues);
}
#if UNITY_EDITOR
public override bool OnEditorGUI()
{
UnityEditor.EditorGUI.BeginChangeCheck();
int value = UnityEditor.EditorGUILayout.IntPopup(m_Label, (int)m_MenuItem.GetValue(), m_EnumStrings, m_EnumValues);
if (UnityEditor.EditorGUI.EndChangeCheck())
{
m_MenuItem.SetValue(value);
return true;
}
return false;
}
#endif
}
}

12
Assets/ScriptableRenderPipeline/common/Debugging/DebugItemDrawer.cs.meta


fileFormatVersion: 2
guid: 7e413732cbed94f4688d5c59709a4556
timeCreated: 1492787007
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

267
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenu.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace UnityEngine.Experimental.Rendering
{
public class DebugMenuItem
{
public Type type { get { return m_Type; } }
public string name { get { return m_Name; } }
public DebugItemDrawer drawer { get { return m_Drawer; } }
public bool dynamicDisplay { get { return m_DynamicDisplay; } }
public bool readOnly { get { return m_Setter == null; } }
public DebugMenuItem(string name, Type type, Func<object> getter, Action<object> setter, bool dynamicDisplay = false, DebugItemDrawer drawer = null)
{
m_Type = type;
m_Setter = setter;
m_Getter = getter;
m_Name = name;
m_Drawer = drawer;
m_DynamicDisplay = dynamicDisplay;
}
public Type GetItemType()
{
return m_Type;
}
public void SetValue(object value)
{
// Setter can be null for readonly items
if(m_Setter != null)
{
m_Setter(value);
m_Drawer.ClampValues(m_Getter, m_Setter);
}
}
public object GetValue()
{
return m_Getter();
}
Func<object> m_Getter;
Action<object> m_Setter;
Type m_Type;
string m_Name;
DebugItemDrawer m_Drawer = null;
bool m_DynamicDisplay = false;
}
public class DebugMenu
{
public string name { get { return m_Name; } }
public int itemCount { get { return m_Items.Count; } }
protected string m_Name = "Unknown Debug Menu";
private GameObject m_Root = null;
private List<DebugMenuItem> m_Items = new List<DebugMenuItem>();
private List<DebugMenuItemUI> m_ItemsUI = new List<DebugMenuItemUI>();
private int m_SelectedItem = -1;
public DebugMenu(string name)
{
m_Name = name;
}
public DebugMenuItem GetDebugMenuItem(int index)
{
if (index >= m_Items.Count || index < 0)
return null;
return m_Items[index];
}
public DebugMenuItem GetSelectedDebugMenuItem()
{
if(m_SelectedItem != -1)
{
return m_Items[m_SelectedItem];
}
return null;
}
public bool HasItem(DebugMenuItem debugItem)
{
foreach(var item in m_Items)
{
if (debugItem == item)
return true;
}
return false;
}
public void RemoveDebugItem(DebugMenuItem debugItem)
{
m_Items.Remove(debugItem);
RebuildGUI();
}
public void AddDebugItem(DebugMenuItem debugItem)
{
m_Items.Add(debugItem);
RebuildGUI();
}
// TODO: Move this to UI classes
public GameObject BuildGUI(GameObject parent)
{
m_Root = new GameObject(string.Format("{0}", m_Name));
m_Root.transform.SetParent(parent.transform);
m_Root.transform.localPosition = Vector3.zero;
m_Root.transform.localScale = Vector3.one;
UI.VerticalLayoutGroup menuVL = m_Root.AddComponent<UI.VerticalLayoutGroup>();
menuVL.spacing = 5.0f;
menuVL.childControlWidth = true;
menuVL.childControlHeight = true;
menuVL.childForceExpandWidth = true;
menuVL.childForceExpandHeight = false;
RectTransform menuVLRectTransform = m_Root.GetComponent<RectTransform>();
menuVLRectTransform.pivot = new Vector2(0.0f, 0.0f);
menuVLRectTransform.localPosition = new Vector3(0.0f, 0.0f);
menuVLRectTransform.anchorMin = new Vector2(0.0f, 0.0f);
menuVLRectTransform.anchorMax = new Vector2(1.0f, 1.0f);
RebuildGUI();
m_Root.SetActive(false);
return m_Root;
}
private void RebuildGUI()
{
m_Root.transform.DetachChildren();
DebugMenuUI.CreateTextElement(string.Format("{0} Title", m_Name), m_Name, 14, TextAnchor.MiddleLeft, m_Root);
m_ItemsUI.Clear();
foreach (DebugMenuItem menuItem in m_Items)
{
DebugItemDrawer drawer = menuItem.drawer; // Should never be null, we have at least the default drawer
m_ItemsUI.Add(drawer.BuildGUI(m_Root, menuItem));
}
}
void SetSelectedItem(int index)
{
if(m_SelectedItem != -1)
{
m_ItemsUI[m_SelectedItem].SetSelected(false);
}
m_SelectedItem = index;
m_ItemsUI[m_SelectedItem].SetSelected(true);
}
public void SetSelected(bool value)
{
m_Root.SetActive(value);
if(value)
{
if (m_SelectedItem == -1)
{
NextItem();
}
else
SetSelectedItem(m_SelectedItem);
}
}
int NextItemIndex(int current)
{
return (current + 1) % m_Items.Count;
}
void NextItem()
{
if(m_Items.Count != 0)
{
int newSelected = (m_SelectedItem + 1) % m_Items.Count;
SetSelectedItem(newSelected);
}
}
int PreviousItemIndex(int current)
{
int newSelected = current - 1;
if (newSelected == -1)
newSelected = m_Items.Count - 1;
return newSelected;
}
void PreviousItem()
{
if(m_Items.Count != 0)
{
int newSelected = m_SelectedItem - 1;
if (newSelected == -1)
newSelected = m_Items.Count - 1;
SetSelectedItem(newSelected);
}
}
public void OnMoveHorizontal(float value)
{
if(m_SelectedItem != -1 && !m_Items[m_SelectedItem].readOnly)
{
if (value > 0.0f)
m_ItemsUI[m_SelectedItem].OnIncrement();
else
m_ItemsUI[m_SelectedItem].OnDecrement();
}
}
public void OnMoveVertical(float value)
{
if (value > 0.0f)
PreviousItem();
else
NextItem();
}
public void OnValidate()
{
if (m_SelectedItem != -1 && !m_Items[m_SelectedItem].readOnly)
m_ItemsUI[m_SelectedItem].OnValidate();
}
public void AddDebugMenuItem<ItemType>(string name, Func<object> getter, Action<object> setter, bool dynamicDisplay = false, DebugItemDrawer drawer = null)
{
if (drawer == null)
drawer = new DebugItemDrawer();
DebugMenuItem newItem = new DebugMenuItem(name, typeof(ItemType), getter, setter, dynamicDisplay, drawer);
drawer.SetDebugItem(newItem);
m_Items.Add(newItem);
}
public void Update()
{
// Can happen if the debug menu has been disabled (all UI is destroyed). We can't test DebugMenuManager directly though because of the persistant debug menu (which is always displayed no matter what)
if (m_Root == null)
return;
foreach(var itemUI in m_ItemsUI)
{
if(itemUI.dynamicDisplay)
itemUI.Update();
}
}
}
public class LightingDebugMenu
: DebugMenu
{
public LightingDebugMenu()
: base("Lighting")
{
}
}
}

12
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenu.cs.meta


fileFormatVersion: 2
guid: 8275ad749cb4c4344ba07749bfc7d9d1
timeCreated: 1492075547
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

453
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuItemUI.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.Experimental.Rendering
{
public abstract class DebugMenuItemUI
{
protected GameObject m_Root = null;
protected DebugMenuItem m_MenuItem = null;
public bool dynamicDisplay { get { return m_MenuItem.dynamicDisplay; } }
protected DebugMenuItemUI(DebugMenuItem menuItem)
{
m_MenuItem = menuItem;
}
public abstract void SetSelected(bool value);
public abstract void OnValidate();
public abstract void OnIncrement();
public abstract void OnDecrement();
public abstract void Update();
}
public class DebugMenuSimpleItemUI : DebugMenuItemUI
{
protected GameObject m_Name = null;
protected GameObject m_Value = null;
protected DebugMenuSimpleItemUI(GameObject parent, DebugMenuItem menuItem, string name)
: base(menuItem)
{
m_Root = DebugMenuUI.CreateHorizontalLayoutGroup("", true, true, false, false, parent);
m_Name = DebugMenuUI.CreateTextElement(m_MenuItem.name, name, 10, TextAnchor.MiddleLeft, m_Root);
var layoutElem = m_Name.AddComponent<UI.LayoutElement>();
layoutElem.minWidth = DebugMenuUI.kDebugItemNameWidth;
m_Value = DebugMenuUI.CreateTextElement(string.Format("{0} value", name), "", 10, TextAnchor.MiddleLeft, m_Root);
}
public override void SetSelected(bool value)
{
m_Name.GetComponent<UI.Text>().color = value ? DebugMenuUI.kColorSelected : DebugMenuUI.kColorUnSelected;
m_Value.GetComponent<UI.Text>().color = value ? DebugMenuUI.kColorSelected : DebugMenuUI.kColorUnSelected;
}
public override void OnValidate()
{
throw new System.NotImplementedException();
}
public override void OnIncrement()
{
throw new System.NotImplementedException();
}
public override void OnDecrement()
{
throw new System.NotImplementedException();
}
public override void Update()
{
throw new System.NotImplementedException();
}
}
public class DebugMenuBoolItemUI : DebugMenuSimpleItemUI
{
public DebugMenuBoolItemUI(GameObject parent, DebugMenuItem menuItem, string name)
: base(parent, menuItem, name)
{
Update();
}
public override void Update()
{
m_Value.GetComponent<UI.Text>().text = (bool)m_MenuItem.GetValue() ? "True" : "False";
}
public override void OnValidate()
{
m_MenuItem.SetValue(!(bool)m_MenuItem.GetValue());
Update();
}
public override void OnIncrement()
{
OnValidate();
}
public override void OnDecrement()
{
OnValidate();
}
}
public class DebugMenuFloatItemUI : DebugMenuSimpleItemUI
{
bool m_SelectIncrementMode = false;
int m_CurrentIncrementIndex = -1;
public DebugMenuFloatItemUI(GameObject parent, DebugMenuItem menuItem, string name)
: base(parent, menuItem, name)
{
Update();
}
public override void Update()
{
float currentValue = (float)m_MenuItem.GetValue();
bool isNegative = currentValue < 0.0f;
// Easier to format the string without caring about the '-' sign. We add it back at the end
currentValue = Mathf.Abs(currentValue);
char separator = System.Convert.ToChar(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
// Start with the maximum amount of trailing zeros
string valueWithMaxDecimals = string.Format("{0:0.00000}", currentValue);
// Remove trailing zeros until we reach the separator or we reach the decimal we are currently editing.
int separatorIndex = valueWithMaxDecimals.LastIndexOf(separator);
int index = valueWithMaxDecimals.Length - 1;
while (
valueWithMaxDecimals[index] == '0' // Remove trailing zeros
&& index > (separatorIndex + 1) // until we reach the separator
&& index > (System.Math.Abs(m_CurrentIncrementIndex) + separatorIndex)) // Or it's the index of the current decimal being edited (so as to display the last trailing zero in this case)
{
index--;
}
string finalValue = new string(valueWithMaxDecimals.ToCharArray(), 0, index + 1);
// Add leading zeros until we reach where the current order is being edited.
if(m_CurrentIncrementIndex > 0)
{
float incrementValue = Mathf.Pow(10.0f, (float)m_CurrentIncrementIndex);
if(incrementValue > currentValue)
{
float compareValue = currentValue + 1.0f; // Start at 1.0f because we know that we are going to increment by 10 or more
while (incrementValue > compareValue)
{
finalValue = finalValue.Insert(0, "0");
compareValue *= 10.0f;
}
}
}
// When selecting which decimal/order you want to edit, we show brackets around the figure to show the user.
if(m_SelectIncrementMode)
{
separatorIndex = finalValue.LastIndexOf(separator); // separator may have changed place if we added leading zeros
int bracketIndex = separatorIndex - m_CurrentIncrementIndex;
if(m_CurrentIncrementIndex >= 0) // Skip separator
bracketIndex -= 1;
finalValue = finalValue.Insert(bracketIndex, "[");
finalValue = finalValue.Insert(bracketIndex + 2, "]");
}
if(isNegative)
finalValue = finalValue.Insert(0, "-");
m_Value.GetComponent<UI.Text>().text = finalValue;
}
public override void OnValidate()
{
m_SelectIncrementMode = !m_SelectIncrementMode;
Update();
}
public override void OnIncrement()
{
if(!m_SelectIncrementMode)
{
m_MenuItem.SetValue((float)m_MenuItem.GetValue() + Mathf.Pow(10.0f, (float)m_CurrentIncrementIndex));
}
else
{
m_CurrentIncrementIndex -= 1; // * 0.1 (10^m_CurrentIncrementIndex)
m_CurrentIncrementIndex = System.Math.Max(-5, m_CurrentIncrementIndex);
}
Update();
}
public override void OnDecrement()
{
if (!m_SelectIncrementMode)
{
m_MenuItem.SetValue((float)m_MenuItem.GetValue() - Mathf.Pow(10.0f, (float)m_CurrentIncrementIndex));
}
else
{
m_CurrentIncrementIndex += 1; // * 10 (10^m_CurrentIncrementIndex)
}
Update();
}
}
// Everything is done with int. We don't really care about values > 2b for debugging.
public class DebugMenuIntegerItemUI : DebugMenuSimpleItemUI
{
bool m_SelectIncrementMode = false;
int m_CurrentIncrementIndex = 0;
public DebugMenuIntegerItemUI(GameObject parent, DebugMenuItem menuItem, string name)
: base(parent, menuItem, name)
{
}
protected void UpdateText(int value)
{
bool isNegative = value < 0f;
// Easier to format the string without caring about the '-' sign. We add it back at the end
value = System.Math.Abs(value);
string finalValue = string.Format("{0}", value);
// Add leading zeros until we reach where the current order is being edited.
if(m_CurrentIncrementIndex > 0)
{
int incrementValue = (int)System.Math.Pow(10, m_CurrentIncrementIndex);
if(incrementValue > value)
{
int compareValue = System.Math.Max(value, 1);
while (incrementValue > compareValue)
{
finalValue = finalValue.Insert(0, "0");
compareValue *= 10;
}
}
}
// When selecting which decimal/order you want to edit, we show brackets around the figure to show the user.
if(m_SelectIncrementMode)
{
int bracketIndex = finalValue.Length - 1 - m_CurrentIncrementIndex;
finalValue = finalValue.Insert(bracketIndex, "[");
finalValue = finalValue.Insert(bracketIndex + 2, "]");
}
if(isNegative)
finalValue = finalValue.Insert(0, "-");
m_Value.GetComponent<UI.Text>().text = finalValue;
}
protected virtual int GetIntegerValue()
{
throw new System.NotImplementedException();
}
protected virtual void SetIntegerValue(int value)
{
throw new System.NotImplementedException();
}
public override void Update()
{
UpdateText(GetIntegerValue());
}
public override void OnValidate()
{
m_SelectIncrementMode = !m_SelectIncrementMode;
Update();
}
public override void OnIncrement()
{
if (!m_SelectIncrementMode)
{
SetIntegerValue(GetIntegerValue() + (int)Mathf.Pow(10.0f, (float)m_CurrentIncrementIndex));
}
else
{
m_CurrentIncrementIndex -= 1; // *= 0.1 (10^m_CurrentIncrementIndex)
m_CurrentIncrementIndex = System.Math.Max(0, m_CurrentIncrementIndex);
}
Update();
}
public override void OnDecrement()
{
if (!m_SelectIncrementMode)
{
SetIntegerValue(GetIntegerValue() - (int)Mathf.Pow(10.0f, (float)m_CurrentIncrementIndex));
}
else
{
m_CurrentIncrementIndex += 1; // *= 10 (10^m_CurrentIncrementIndex)
m_CurrentIncrementIndex = System.Math.Max(0, m_CurrentIncrementIndex);
}
Update();
}
}
public class DebugMenuIntItemUI : DebugMenuIntegerItemUI
{
public DebugMenuIntItemUI(GameObject parent, DebugMenuItem menuItem, string name)
: base(parent, menuItem, name)
{
UpdateText((int)m_MenuItem.GetValue());
}
protected override int GetIntegerValue()
{
return (int)m_MenuItem.GetValue();
}
protected override void SetIntegerValue(int value)
{
m_MenuItem.SetValue(value);
}
}
public class DebugMenuUIntItemUI : DebugMenuIntegerItemUI
{
public DebugMenuUIntItemUI(GameObject parent, DebugMenuItem menuItem, string name)
: base(parent, menuItem, name)
{
UpdateText((int)(uint)m_MenuItem.GetValue());
}
protected override int GetIntegerValue()
{
return (int)(uint)m_MenuItem.GetValue();
}
protected override void SetIntegerValue(int value)
{
m_MenuItem.SetValue((uint)System.Math.Max(0, value));
}
}
public class DebugMenuEnumItemUI : DebugMenuSimpleItemUI
{
int m_CurrentValueIndex = 0;
GUIContent[] m_ValueNames;
int[] m_Values;
public DebugMenuEnumItemUI(GameObject parent, DebugMenuItem menuItem, string name, GUIContent[] valueNames, int[] values)
: base(parent, menuItem, name)
{
m_Values = values;
m_ValueNames = valueNames;
m_CurrentValueIndex = FindIndexForValue((int)m_MenuItem.GetValue());
Update();
}
private int FindIndexForValue(int value)
{
for(int i = 0 ; i < m_Values.Length ; ++i)
{
if (m_Values[i] == value)
return i;
}
return -1;
}
public override void Update()
{
if(m_CurrentValueIndex != -1)
{
m_Value.GetComponent<UI.Text>().text = m_ValueNames[m_CurrentValueIndex].text;
}
}
public override void OnValidate()
{
OnIncrement();
}
public override void OnIncrement()
{
m_CurrentValueIndex = (m_CurrentValueIndex + 1) % m_Values.Length;
m_MenuItem.SetValue(m_Values[m_CurrentValueIndex]);
Update();
}
public override void OnDecrement()
{
m_CurrentValueIndex -= 1;
if (m_CurrentValueIndex < 0)
m_CurrentValueIndex = m_Values.Length - 1;
m_MenuItem.SetValue(m_Values[m_CurrentValueIndex]);
Update();
}
}
public class DebugMenuColorItemUI : DebugMenuItemUI
{
protected GameObject m_Name = null;
protected GameObject m_ColorRect = null;
public DebugMenuColorItemUI(GameObject parent, DebugMenuItem menuItem, string name)
: base(menuItem)
{
m_MenuItem = menuItem;
m_Root = DebugMenuUI.CreateHorizontalLayoutGroup(name, true, true, false, false, parent);
m_Name = DebugMenuUI.CreateTextElement(m_MenuItem.name, name, 10, TextAnchor.MiddleLeft, m_Root);
var layoutElemName = m_Name.AddComponent<UI.LayoutElement>();
layoutElemName.minWidth = DebugMenuUI.kDebugItemNameWidth;
// Force layout because we need the right height for the color rect element afterward.
UI.LayoutRebuilder.ForceRebuildLayoutImmediate(m_Root.GetComponent<RectTransform>());
RectTransform nameRect = m_Name.GetComponent<RectTransform>();
m_ColorRect = new GameObject();
m_ColorRect.transform.SetParent(m_Root.transform, false);
m_ColorRect.AddComponent<UI.Image>();
UI.LayoutElement layoutElem = m_ColorRect.AddComponent<UI.LayoutElement>();
// We need to set min width/height because without an image, the size would be zero.
layoutElem.minHeight = nameRect.rect.height;
layoutElem.minWidth = 40.0f;
Update();
}
public override void Update()
{
Color currentValue = (Color)m_MenuItem.GetValue();
UI.Image image = m_ColorRect.GetComponent<UI.Image>();
image.color = currentValue;
}
public override void SetSelected(bool value)
{
m_Name.GetComponent<UI.Text>().color = value ? DebugMenuUI.kColorSelected : DebugMenuUI.kColorUnSelected;
}
// TODO: Edit mode!
public override void OnValidate()
{
}
public override void OnIncrement()
{
}
public override void OnDecrement()
{
}
}
}

12
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuItemUI.cs.meta


fileFormatVersion: 2
guid: 2af8a6ada82d1994d9cfd79a8b92eebc
timeCreated: 1492702176
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

194
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuManager.cs


using System;
using System.Linq;
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.Experimental.Rendering
{
public class DebugMenuManager
{
static private DebugMenuManager s_Instance = null;
static public DebugMenuManager instance
{
get
{
if (s_Instance == null)
{
s_Instance = new DebugMenuManager();
}
return s_Instance;
}
}
DebugMenuManager()
{
LookUpDebugMenuClasses();
m_PersistentDebugMenu = new DebugMenu("Persistent");
m_DebugMenuUI = new DebugMenuUI(this);
}
bool m_Enabled = false;
int m_ActiveMenuIndex = 0;
List<DebugMenu> m_DebugMenus = new List<DebugMenu>();
DebugMenu m_PersistentDebugMenu = null;
DebugMenuUI m_DebugMenuUI = null;
public bool isEnabled { get { return m_Enabled; } }
public int activeMenuIndex { get { return m_ActiveMenuIndex; } set { m_ActiveMenuIndex = value; } }
public int menuCount { get { return m_DebugMenus.Count; } }
public DebugMenu GetDebugMenu(int index)
{
if (index < m_DebugMenus.Count)
return m_DebugMenus[index];
else
return null;
}
public DebugMenu GetPersistentDebugMenu()
{
return m_PersistentDebugMenu;
}
void LookUpDebugMenuClasses()
{
// Prepare all debug menus
var types = Assembly.GetAssembly(typeof(DebugMenu)).GetTypes()
.Where(t => t.IsSubclassOf(typeof(DebugMenu)));
m_DebugMenus.Clear();
foreach (var type in types)
{
m_DebugMenus.Add((DebugMenu)Activator.CreateInstance(type));
}
}
public void PreviousDebugMenu()
{
m_DebugMenus[m_ActiveMenuIndex].SetSelected(false);
m_ActiveMenuIndex = m_ActiveMenuIndex - 1;
if (m_ActiveMenuIndex == -1)
m_ActiveMenuIndex = m_DebugMenus.Count - 1;
m_DebugMenus[m_ActiveMenuIndex].SetSelected(true);
}
public void NextDebugMenu()
{
m_DebugMenus[m_ActiveMenuIndex].SetSelected(false);
m_ActiveMenuIndex = (m_ActiveMenuIndex + 1) % m_DebugMenus.Count;
m_DebugMenus[m_ActiveMenuIndex].SetSelected(true);
}
public void ToggleMenu()
{
m_Enabled = !m_Enabled;
m_DebugMenuUI.BuildGUI();
m_DebugMenuUI.Toggle();
m_DebugMenus[m_ActiveMenuIndex].SetSelected(m_Enabled);
}
public void OnValidate()
{
m_DebugMenus[m_ActiveMenuIndex].OnValidate();
}
public void OnMakePersistent()
{
DebugMenuItem selectedItem = m_DebugMenus[m_ActiveMenuIndex].GetSelectedDebugMenuItem();
if(selectedItem != null && selectedItem.readOnly)
{
if(m_PersistentDebugMenu.HasItem(selectedItem))
{
m_PersistentDebugMenu.RemoveDebugItem(selectedItem);
}
else
{
m_PersistentDebugMenu.AddDebugItem(selectedItem);
}
}
if(m_PersistentDebugMenu.itemCount == 0)
{
m_PersistentDebugMenu.SetSelected(false);
m_DebugMenuUI.EnablePersistentView(false); // Temp, should just need the above. Wait for background UI to be moved to menu itself
}
else
{
m_PersistentDebugMenu.SetSelected(true);
m_DebugMenuUI.EnablePersistentView(true);
}
}
public void OnMoveHorizontal(float value)
{
m_DebugMenus[m_ActiveMenuIndex].OnMoveHorizontal(value);
}
public void OnMoveVertical(float value)
{
m_DebugMenus[m_ActiveMenuIndex].OnMoveVertical(value);
}
T GetDebugMenu<T>() where T:DebugMenu
{
foreach(DebugMenu menu in m_DebugMenus)
{
if (menu is T)
return menu as T;
}
return null;
}
DebugMenu GetDebugMenu(string name)
{
foreach(DebugMenu menu in m_DebugMenus)
{
if (menu.name == name)
return menu;
}
return null;
}
public void Update()
{
if (m_ActiveMenuIndex != -1)
m_DebugMenus[m_ActiveMenuIndex].Update();
m_PersistentDebugMenu.Update();
}
public void AddDebugItem<DebugMenuType, ItemType>(string name, Func<object> getter, Action<object> setter = null, bool dynamicDisplay = false, DebugItemDrawer drawer = null) where DebugMenuType : DebugMenu
{
DebugMenuType debugMenu = GetDebugMenu<DebugMenuType>();
if (debugMenu != null)
{
debugMenu.AddDebugMenuItem<ItemType>(name, getter, setter, dynamicDisplay, drawer);
}
}
public void AddDebugItem<ItemType>(string debugMenuName, string name, Func<object> getter, Action<object> setter = null, bool dynamicDisplay = false, DebugItemDrawer drawer = null)
{
DebugMenu debugMenu = GetDebugMenu(debugMenuName);
// If the menu does not exist, create a generic one. This way, users don't have to explicitely create a new DebugMenu class if they don't need any particular overriding of default behavior.
if(debugMenu == null)
{
debugMenu = new DebugMenu(debugMenuName);
m_DebugMenus.Add(debugMenu);
}
if (debugMenu != null)
{
debugMenu.AddDebugMenuItem<ItemType>(name, getter, setter, dynamicDisplay, drawer);
}
}
}
}

12
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuManager.cs.meta


fileFormatVersion: 2
guid: 0d82eeff53030774abf4d8d510717fad
timeCreated: 1491995655
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

178
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUI.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.Experimental.Rendering
{
public class DebugMenuUI
{
public static Color kColorSelected = new Color(1.0f, 1.0f, 1.0f, 1.0f);
public static Color kColorUnSelected = new Color(0.25f, 0.25f, 0.25f, 1.0f);
public static Color kBackgroundColor = new Color(0.5f, 0.5f, 0.5f, 0.4f);
public static float kDebugItemNameWidth = 150.0f;
GameObject m_Root = null;
GameObject[] m_MenuRoots = null;
GameObject m_MainMenuRoot = null;
GameObject m_PersistentMenuRoot = null;
bool m_Enabled = false;
DebugMenuManager m_DebugMenuManager = null;
public DebugMenuUI(DebugMenuManager manager)
{
m_DebugMenuManager = manager;
}
public void Toggle()
{
m_Enabled = !m_Enabled;
m_MainMenuRoot.SetActive(m_Enabled);
}
public void EnablePersistentView(bool value)
{
m_PersistentMenuRoot.SetActive(value);
}
void CleanUpGUI()
{
Object.Destroy(m_Root);
}
public void BuildGUI()
{
if (m_Root != null)
return;
float kBorderSize = 5.0f;
m_Root = new GameObject("DebugMenu Root");
Canvas canvas = m_Root.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
UI.CanvasScaler canvasScaler = m_Root.AddComponent<UI.CanvasScaler>();
canvasScaler.uiScaleMode = UI.CanvasScaler.ScaleMode.ScaleWithScreenSize;
canvasScaler.referenceResolution = new Vector2(800.0f, 600.0f);
// TODO: Move background an layout to the menu itself.
m_MainMenuRoot = new GameObject("Background");
m_MainMenuRoot.AddComponent<CanvasRenderer>();
var image = m_MainMenuRoot.AddComponent<UI.Image>();
m_MainMenuRoot.transform.SetParent(m_Root.transform, false);
image.rectTransform.pivot = new Vector2(0.0f, 0.0f);
image.rectTransform.localPosition = Vector3.zero;
image.rectTransform.localScale = Vector3.one;
image.rectTransform.anchorMin = new Vector2(0.0f, 0.0f);
image.rectTransform.anchorMax = new Vector2(0.5f, 1.0f);
image.rectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
image.rectTransform.sizeDelta = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));
image.color = kBackgroundColor;
GameObject goVL = DebugMenuUI.CreateVerticalLayoutGroup("DebugMenu VLayout", true, true, true, false, 5.0f, m_MainMenuRoot);
RectTransform menuVLRectTransform = goVL.GetComponent<RectTransform>();
menuVLRectTransform.pivot = new Vector2(0.0f, 0.0f);
menuVLRectTransform.localPosition = Vector3.zero;
menuVLRectTransform.localScale = Vector3.one;
menuVLRectTransform.anchorMin = new Vector2(0.0f, 0.0f);
menuVLRectTransform.anchorMax = new Vector2(1.0f, 1.0f);
menuVLRectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
menuVLRectTransform.sizeDelta = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));
// TODO: Move background an layout to the menu itself.
m_PersistentMenuRoot = new GameObject("Background_Persistent");
m_PersistentMenuRoot.AddComponent<CanvasRenderer>();
image = m_PersistentMenuRoot.AddComponent<UI.Image>();
m_PersistentMenuRoot.transform.SetParent(m_Root.transform, false);
image.rectTransform.pivot = new Vector2(0.0f, 0.0f);
image.rectTransform.localPosition = Vector3.zero;
image.rectTransform.localScale = Vector3.one;
image.rectTransform.anchorMin = new Vector2(0.7f, 0.8f);
image.rectTransform.anchorMax = new Vector2(1.0f, 1.0f);
image.rectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
image.rectTransform.sizeDelta = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));
image.color = kBackgroundColor;
GameObject goVL2 = DebugMenuUI.CreateVerticalLayoutGroup("DebugMenu VLayout", true, true, true, false, 5.0f, m_PersistentMenuRoot);
menuVLRectTransform = goVL2.GetComponent<RectTransform>();
menuVLRectTransform.pivot = new Vector2(0.0f, 0.0f);
menuVLRectTransform.localPosition = Vector3.zero;
menuVLRectTransform.localScale = Vector3.one;
menuVLRectTransform.anchorMin = new Vector2(0.0f, 0.0f);
menuVLRectTransform.anchorMax = new Vector2(1.0f, 1.0f);
menuVLRectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
menuVLRectTransform.sizeDelta = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));
m_PersistentMenuRoot.SetActive(false);
DebugMenuUI.CreateTextElement("DebugMenuTitle", "Debug Menu", 14, TextAnchor.MiddleCenter, goVL);
int menuCount = m_DebugMenuManager.menuCount;
m_MenuRoots = new GameObject[menuCount];
for (int i = 0; i < menuCount; ++i)
{
m_MenuRoots[i] = m_DebugMenuManager.GetDebugMenu(i).BuildGUI(goVL);
}
m_DebugMenuManager.GetPersistentDebugMenu().BuildGUI(goVL2);
}
public static GameObject CreateVerticalLayoutGroup(string name, bool controlWidth, bool controlHeight, bool forceExpandWidth, bool forceExpandHeight, GameObject parent = null )
{
return CreateVerticalLayoutGroup(name, controlWidth, controlHeight, forceExpandWidth, forceExpandHeight, 0.0f, parent);
}
public static GameObject CreateVerticalLayoutGroup(string name, bool controlWidth, bool controlHeight, bool forceExpandWidth, bool forceExpandHeight, float spacing, GameObject parent = null )
{
GameObject go = new GameObject(name);
go.transform.SetParent(parent.transform, false);
UI.VerticalLayoutGroup verticalLayout = go.AddComponent<UI.VerticalLayoutGroup>();
verticalLayout.childControlHeight = controlHeight;
verticalLayout.childControlWidth = controlWidth;
verticalLayout.childForceExpandHeight = forceExpandHeight;
verticalLayout.childForceExpandWidth = forceExpandWidth;
verticalLayout.spacing = spacing;
return go;
}
public static GameObject CreateHorizontalLayoutGroup(string name, bool controlWidth, bool controlHeight, bool forceExpandWidth, bool forceExpandHeight, GameObject parent = null)
{
return CreateHorizontalLayoutGroup(name, controlWidth, controlHeight, forceExpandWidth, forceExpandHeight, 0.0f, parent);
}
public static GameObject CreateHorizontalLayoutGroup(string name, bool controlWidth, bool controlHeight, bool forceExpandWidth, bool forceExpandHeight, float spacing = 1.0f, GameObject parent = null)
{
GameObject go = new GameObject(name);
go.transform.SetParent(parent.transform, false);
UI.HorizontalLayoutGroup horizontalLayout = go.AddComponent<UI.HorizontalLayoutGroup>();
horizontalLayout.childControlHeight = controlHeight;
horizontalLayout.childControlWidth = controlWidth;
horizontalLayout.childForceExpandHeight = forceExpandHeight;
horizontalLayout.childForceExpandWidth = forceExpandWidth;
horizontalLayout.spacing = spacing;
return go;
}
public static GameObject CreateTextElement(string elementName, string text, int size = 14, TextAnchor alignment = TextAnchor.MiddleLeft, GameObject parent = null)
{
GameObject goText = new GameObject(elementName);
goText.transform.SetParent(parent.transform, false);
goText.transform.transform.localPosition = Vector3.zero;
goText.transform.transform.localScale = Vector3.one;
UI.Text textComponent = goText.AddComponent<UI.Text>();
textComponent.font = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
textComponent.text = text;
textComponent.alignment = alignment;
textComponent.fontSize = size;
textComponent.verticalOverflow = VerticalWrapMode.Overflow;
textComponent.color = DebugMenuUI.kColorUnSelected;
RectTransform rectTransform = goText.GetComponent<RectTransform>();
rectTransform.pivot = new Vector2(0.0f, 0.0f);
rectTransform.localPosition = new Vector3(0.0f, 0.0f);
rectTransform.anchorMin = new Vector2(0.0f, 0.0f);
rectTransform.anchorMax = new Vector2(1.0f, 1.0f);
return goText;
}
}
}

12
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUI.cs.meta


fileFormatVersion: 2
guid: 4e88bb221a7ceb74283e4e5f93e75092
timeCreated: 1492603542
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

57
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUpdater.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.Experimental.Rendering
{
[ExecuteInEditMode]
public class DebugMenuUpdater : MonoBehaviour
{
void Update()
{
DebugMenuManager.instance.Update();
DebugActionManager.instance.Update();
if (DebugActionManager.instance.GetAction(DebugActionManager.DebugAction.EnableDebugMenu) != 0.0f)
{
DebugMenuManager.instance.ToggleMenu();
}
if (DebugMenuManager.instance.isEnabled)
{
if (DebugActionManager.instance.GetAction(DebugActionManager.DebugAction.PreviousDebugMenu) != 0.0f)
{
DebugMenuManager.instance.PreviousDebugMenu();
}
if (DebugActionManager.instance.GetAction(DebugActionManager.DebugAction.NextDebugMenu) != 0.0f)
{
DebugMenuManager.instance.NextDebugMenu();
}
if (DebugActionManager.instance.GetAction(DebugActionManager.DebugAction.Validate) != 0.0f)
{
DebugMenuManager.instance.OnValidate();
}
if (DebugActionManager.instance.GetAction(DebugActionManager.DebugAction.Persistent) != 0.0f)
{
DebugMenuManager.instance.OnMakePersistent();
}
float moveHorizontal = DebugActionManager.instance.GetAction(DebugActionManager.DebugAction.MoveHorizontal);
if (moveHorizontal != 0.0f)
{
DebugMenuManager.instance.OnMoveHorizontal(moveHorizontal);
}
float moveVertical = DebugActionManager.instance.GetAction(DebugActionManager.DebugAction.MoveVertical);
if (moveVertical != 0.0f)
{
DebugMenuManager.instance.OnMoveVertical(moveVertical);
}
}
}
}
}

12
Assets/ScriptableRenderPipeline/common/Debugging/DebugMenuUpdater.cs.meta


fileFormatVersion: 2
guid: 2dfdab1050228974ba8fbbd56e87da3e
timeCreated: 1492697894
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

76
Assets/ScriptableRenderPipeline/common/Debugging/Debugging.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.Experimental.Rendering
{
public class Debugging : MonoBehaviour
{
private static List<string> m_DebugMessages = new List<string>();
public static void PushDebugMessage(string message)
{
m_DebugMessages.Add(message);
}
static public bool CheckRequiredInputButtonMapping(string[] values)
{
bool inputsOk = true;
foreach (string value in values)
{
try
{
Input.GetButton(value);
}
catch
{
Debug.LogError(string.Format("Required input button mapping missing: {0}.", value));
inputsOk = false;
}
}
return inputsOk;
}
static public bool CheckRequiredInputAxisMapping(string[] values)
{
bool inputsOk = true;
foreach (string value in values)
{
try
{
Input.GetAxis(value);
}
catch
{
Debug.LogWarning(string.Format("Required input axis mapping missing: {0}.", value));
inputsOk = false;
}
}
return inputsOk;
}
void OnGUI()
{
using (new GUILayout.HorizontalScope())
{
GUILayout.Space(10.0f);
using (new GUILayout.VerticalScope())
{
GUILayout.Space(10.0f);
for (int i = 0; i < m_DebugMessages.Count; ++i)
{
GUILayout.Label(m_DebugMessages[i]);
}
}
}
// Make sure to clear only after all relevant events have occured.
if (Event.current.type == EventType.Repaint)
m_DebugMessages.Clear();
}
}
}

9
Assets/ScriptableRenderPipeline/common/Debugging/Editor.meta


fileFormatVersion: 2
guid: 81304ee5cfbb2ff4b90df73d308d903e
folderAsset: yes
timeCreated: 1492162286
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

12
Assets/ScriptableRenderPipeline/common/Debugging/Editor/DebugMenuEditor.cs.meta


fileFormatVersion: 2
guid: 7a41f968abff8f14a93e3d1ea44e774b
timeCreated: 1492162306
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

72
Assets/ScriptableRenderPipeline/common/Debugging/Editor/DebugMenuEditor.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
namespace UnityEngine.Experimental.Rendering
{
// This is the class that handles rendering the debug menu in the editor (as opposed to the runtime version in the player)
public class DebugMenuEditor : EditorWindow
{
[MenuItem("HDRenderPipeline/Debug Menu")]
static void DisplayDebugMenu()
{
var window = EditorWindow.GetWindow<DebugMenuEditor>("Debug Menu");
window.Show();
}
DebugMenuManager m_DebugMenu = null;
DebugMenuEditor()
{
}
void OnEnable()
{
m_DebugMenu = DebugMenuManager.instance;
}
void OnGUI()
{
if (m_DebugMenu == null)
return;
// Contrary to the menu in the player, here we always render the menu wether it's enabled or not. This is a separate window so user can manage it however they want.
EditorGUI.BeginChangeCheck();
int debugMenuCount = m_DebugMenu.menuCount;
int activeMenuIndex = m_DebugMenu.activeMenuIndex;
using (new EditorGUILayout.HorizontalScope())
{
for(int i = 0 ; i < debugMenuCount ; ++i)
{
GUIStyle style = EditorStyles.miniButtonMid;
if (i == 0)
style = EditorStyles.miniButtonLeft;
if (i == debugMenuCount - 1)
style = EditorStyles.miniButtonRight;
if (GUILayout.Toggle(i == activeMenuIndex, new GUIContent(m_DebugMenu.GetDebugMenu(i).name), style))
activeMenuIndex = i;
}
}
if(EditorGUI.EndChangeCheck())
{
m_DebugMenu.activeMenuIndex = activeMenuIndex;
}
using(new EditorGUILayout.VerticalScope())
{
DebugMenu activeMenu = m_DebugMenu.GetDebugMenu(m_DebugMenu.activeMenuIndex);
bool needRepaint = false;
for (int i = 0; i < activeMenu.itemCount; ++i)
{
needRepaint = needRepaint || activeMenu.GetDebugMenuItem(i).drawer.OnEditorGUI();
}
if (needRepaint)
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
}
}
}
}

27
Assets/TestScenes/HDTest/GraphicTest/SSS/Infinite-Scan_License.txt


Creative Commons Licence
Infinite, 3D Head Scan by Lee Perry-Smith is licensed under a Creative Commons Attribution 3.0 Unported License.
Based on a work at www.triplegangers.com.
Permissions beyond the scope of this license may be available at http://www.ir-ltd.net/
Please remember: Do what you want with the files, but always mention where you got them from...
----------------------
This distribution was created by Morgan McGuire and Guedis Cardenas
http://graphics.cs.williams.edu/data/
Downloaded from:
http://www.ir-ltd.net/infinite-3d-head-scan-released
Then decompressed the Object and displacement maps .rar files. We renamed Map-COL.jpg to lambertian.jpg
We converted the displacement file from .tif to 16-bit .png. and saved it as bump.png
Then made a lowRes version of the bump map by rescaling it with sharpening in Photoshop using
Autolevels to fill the dynamic range, converting 8-bit, and filling the seams with content aware fill.
We saved this as bump-lowRes.png.
Edited mtl file:
Set up texture maps and adjusted the default glossy highlight.
We added:
map_bump -bm 0.001 bump-lowRes.png
map_bump -bm 0.02 bump.png (high res)
ks .0001 .0001 .0001
Ns 5

8
Assets/TestScenes/HDTest/GraphicTest/SSS/Infinite-Scan_License.txt.meta


fileFormatVersion: 2
guid: 8514703e504978a41b5966d47beeb42d
timeCreated: 1493290943
licenseType: Pro
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

178
Assets/TestScenes/HDTest/GraphicTest/SSS/InifiniteRealityHead.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: InifiniteRealityHead
m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
m_ShaderKeywords: _ALPHACUTOFFENABLE_OFF _DEPTHOFFSETENABLE_OFF _DISTORTIONDEPTHTEST_OFF
_DISTORTIONENABLE_OFF _DISTORTIONONLY_OFF _DOUBLESIDEDENABLE_OFF _ENABLEPERPIXELDISPLACEMENT_OFF
_ENABLEWIND_OFF _NORMALMAP _NORMALMAP_TANGENT_SPACE
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses:
- DistortionVectors
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AnisotropyMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseColorMap:
m_Texture: {fileID: 2800000, guid: 6e9f830fee2ef0c44af529384a948910, 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}
- _DetailMap:
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}
- _DistortionVectorMap:
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}
- _EmissiveColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _HeightMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 2800000, guid: 5ec067c14feff4144aa09544a2326b58, type: 3}
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}
- _SpecularColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecularOcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubsurfaceRadiusMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _AlphaCutoff: 0.5
- _AlphaCutoffEnable: 0
- _Anisotropy: 0
- _BlendMode: 0
- _BumpScale: 1
- _CullMode: 2
- _Cutoff: 0.5
- _DepthOffsetEnable: 0
- _DetailAlbedoScale: 1
- _DetailNormalMapScale: 1
- _DetailNormalScale: 1
- _DetailSmoothnessScale: 1
- _DistortionDepthTest: 0
- _DistortionEnable: 0
- _DistortionOnly: 0
- _DoubleSidedEnable: 0
- _DoubleSidedMirrorEnable: 1
- _Drag: 1
- _DstBlend: 0
- _EmissiveColorMode: 1
- _EmissiveIntensity: 0
- _EnablePerPixelDisplacement: 0
- _EnableWind: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _HeightAmplitude: 0.01
- _HeightCenter: 0.5
- _HorizonFade: 1
- _InitialBend: 1
- _MaterialID: 1
- _Metallic: 0
- _Mode: 0
- _NormalMapSpace: 0
- _NormalScale: 1
- _OcclusionStrength: 1
- _PPDLodThreshold: 5
- _PPDMaxSamples: 15
- _PPDMinSamples: 5
- _Parallax: 0.02
- _ShiverDirectionality: 0.5
- _ShiverDrag: 0.2
- _Smoothness: 0.566
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _StencilRef: 1
- _Stiffness: 1
- _SubsurfaceProfile: 1
- _SubsurfaceRadius: 1
- _SurfaceType: 0
- _TexWorldScale: 1
- _Thickness: 1
- _UVBase: 0
- _UVDetail: 0
- _UVSec: 0
- _ZTestMode: 8
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}

9
Assets/TestScenes/HDTest/GraphicTest/SSS/InifiniteRealityHead.mat.meta


fileFormatVersion: 2
guid: 70d048a3453cc5b4183269db4555c8e7
timeCreated: 1493291086
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/TestScenes/HDTest/GraphicTest/SSS/bump-lowRes.png
文件差异内容过多而无法显示
查看文件

122
Assets/TestScenes/HDTest/GraphicTest/SSS/bump-lowRes.png.meta


fileFormatVersion: 2
guid: 5ec067c14feff4144aa09544a2326b58
timeCreated: 1493290941
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 1
externalNormalMap: 0
heightScale: 0.0199
normalMapFilter: 0
isReadable: 0
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: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 1
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Standalone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: iPhone
maxTextureSize: 2048
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: tvOS
maxTextureSize: 2048
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: PS4
maxTextureSize: 2048
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: Windows Store Apps
maxTextureSize: 2048
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
- buildTarget: WebGL
maxTextureSize: 2048
textureFormat: -1
textureCompression: 2
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

1001
Assets/TestScenes/HDTest/GraphicTest/SSS/head.OBJ
文件差异内容过多而无法显示
查看文件

148
Assets/TestScenes/HDTest/GraphicTest/SSS/head.OBJ.meta


fileFormatVersion: 2
guid: 2b46db496f27398459cf881becf5763a
timeCreated: 1493290944
licenseType: Pro
ModelImporter:
serializedVersion: 20
fileIDToRecycleName:
100000: Group12
100002: Group14
100004: Group19
100006: Group2
100008: Group24
100010: Group26
100012: Group28
100014: Group33
100016: Group35
100018: Group39
100020: Group4
100022: Group5
100024: Group7
100026: //RootNode
400000: Group12
400002: Group14
400004: Group19
400006: Group2
400008: Group24
400010: Group26
400012: Group28
400014: Group33
400016: Group35
400018: Group39
400020: Group4
400022: Group5
400024: Group7
400026: //RootNode
2300000: Group12
2300002: Group14
2300004: Group19
2300006: Group2
2300008: Group24
2300010: Group26
2300012: Group28
2300014: Group33
2300016: Group35
2300018: Group39
2300020: Group4
2300022: Group5
2300024: Group7
3300000: Group12
3300002: Group14
3300004: Group19
3300006: Group2
3300008: Group24
3300010: Group26
3300012: Group28
3300014: Group33
3300016: Group35
3300018: Group39
3300020: Group4
3300022: Group5
3300024: Group7
4300000: Group12
4300002: Group14
4300004: Group19
4300006: Group2
4300008: Group24
4300010: Group26
4300012: Group28
4300014: Group33
4300016: Group35
4300018: Group39
4300020: Group4
4300022: Group5
4300024: Group7
materials:
importMaterials: 1
materialName: 0
materialSearch: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
clipAnimations: []
isReadable: 1
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
importVisibility: 0
importBlendShapes: 1
importCameras: 1
importLights: 1
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
optimizeMeshForGPU: 1
keepQuads: 0
weldVertices: 1
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVPackMargin: 4
useFileScale: 1
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
importAnimation: 1
copyAvatar: 0
humanDescription:
serializedVersion: 2
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
rootMotionBoneName:
rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1}
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
animationType: 0
humanoidOversampling: 1
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

74
Assets/TestScenes/HDTest/GraphicTest/SSS/lambertian.jpg.meta


fileFormatVersion: 2
guid: 6e9f830fee2ef0c44af529384a948910
timeCreated: 1493290943
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
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
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: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

9
Assets/TestScenes/HDTest/NewBatcherTest/Prefabs.meta


fileFormatVersion: 2
guid: c08fc6135b3f1884782454e0208d1ace
folderAsset: yes
timeCreated: 1493135969
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

82
Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Capsule.prefab


%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: 1121459876145138}
m_IsPrefabParent: 1
--- !u!1 &1121459876145138
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4050123609387240}
- component: {fileID: 33800389589400366}
- component: {fileID: 23510404210144466}
m_Layer: 0
m_Name: Capsule
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 4294967295
m_IsActive: 1
--- !u!4 &4050123609387240
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1121459876145138}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 5.017, y: 9.277177, z: 10.256694}
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!23 &23510404210144466
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1121459876145138}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: a5100d39fb5306e4bb323147186404f2, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &33800389589400366
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1121459876145138}
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}

9
Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Capsule.prefab.meta


fileFormatVersion: 2
guid: 26c64a2e2e014de41b025eb5c11624f9
timeCreated: 1493136661
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

82
Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cube.prefab


%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: 1998597619220778}
m_IsPrefabParent: 1
--- !u!1 &1998597619220778
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4178026753378434}
- component: {fileID: 33237192623079300}
- component: {fileID: 23990624237084050}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 4294967295
m_IsActive: 1
--- !u!4 &4178026753378434
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1998597619220778}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 2.911, y: 9.288988, z: 10.303189}
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!23 &23990624237084050
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1998597619220778}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 62af68f4dc4e3cf45847bb6452fa1947, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &33237192623079300
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1998597619220778}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}

9
Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cube.prefab.meta


fileFormatVersion: 2
guid: f2cc062ff7aebfb45904a24b33381ea6
timeCreated: 1493136657
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

82
Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cylinder.prefab


%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: 1152223544549600}
m_IsPrefabParent: 1
--- !u!1 &1152223544549600
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
serializedVersion: 5
m_Component:
- component: {fileID: 4204944060137348}
- component: {fileID: 33428400342818186}
- component: {fileID: 23517922935797574}
m_Layer: 0
m_Name: Cylinder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 4294967295
m_IsActive: 1
--- !u!4 &4204944060137348
Transform:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1152223544549600}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 6.1, y: 9.277177, z: 10.256694}
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!23 &23517922935797574
MeshRenderer:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1152223544549600}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- {fileID: 2100000, guid: 005934f920e86ec4dba83df16b2bc42d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 1
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &33428400342818186
MeshFilter:
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1152223544549600}
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}

9
Assets/TestScenes/HDTest/NewBatcherTest/Prefabs/Cylinder.prefab.meta


fileFormatVersion: 2
guid: 4d1cf63d0f6d8a140a10372a8559b012
timeCreated: 1493136648
licenseType: Pro
NativeFormatImporter:
mainObjectFileID: 100100000
userData:
assetBundleName:
assetBundleVariant:

部分文件因为文件数量过多而无法显示

正在加载...
取消
保存