Prechádzať zdrojové kódy

add support for transparent models with directx 12 raytracing

Kolja Strohm 2 týždňov pred
rodič
commit
3c1cac0ee0

+ 88 - 0
AnyHit.hlsl

@@ -0,0 +1,88 @@
+#include "Common.hlsl"
+
+Texture2D<float4> textures[] : register(t0, space1);
+SamplerState gSampler : register(s0, space0);
+
+struct VertexData
+{
+    float2 texcoord;
+    float3 normal;
+};
+
+StructuredBuffer<int> textureIdBuffer : register(t1, space2);
+StructuredBuffer<int> indexBuffer : register(t1, space3);
+StructuredBuffer<VertexData> vertexData : register(t1, space4);
+StructuredBuffer<int> polygonSizeBuffer : register(t1, space5);
+
+[shader("anyhit")]
+void AnyHit(inout HitInfo payload, Attributes attrib)
+{
+    //payload.colorAndDistance = float4(1, 1, 1, 1.0);
+    int instanceId = InstanceID();
+    int currentTriangle = PrimitiveIndex();
+    int textureId = 0;
+    for (int i = 0; currentTriangle >= 0; i++)
+    {
+        currentTriangle -= polygonSizeBuffer[i];
+        textureId = textureIdBuffer[i];
+    }
+    Texture2D<float4> texture = textures[textureId];
+    int index = PrimitiveIndex() * 3;
+    VertexData v0 = vertexData[indexBuffer[index]];
+    VertexData v1 = vertexData[indexBuffer[index + 1]];
+    VertexData v2 = vertexData[indexBuffer[index + 2]];
+    float2 texcoord = v0.texcoord * (1 - attrib.bary.x - attrib.bary.y) + v1.texcoord * attrib.bary.x + v2.texcoord * attrib.bary.y;
+    float4 color = texture.SampleLevel(gSampler, texcoord, 0);
+    if (color.w == 0.f)
+    {
+        IgnoreHit();
+    }
+    float distance = RayTCurrent();
+    bool found = false;
+    for (int i = 0; i < payload.hitCount; i++)
+    {
+        if (payload.distance[i] > distance)
+        {
+            found = true;
+            float4 tmpColor = payload.color[i];
+            payload.color[i] = color;
+            float tmpDistance = payload.distance[i];
+            payload.distance[i] = distance;
+            if (color.w == 1.f)
+            {
+                payload.hitCount = i + 1;
+            }
+            else
+            {
+                for (int j = i + 1; j < payload.hitCount + 1 && j < MAX_TRANSPACENT_HITS; j++)
+                {
+                    float4 tmpColor2 = payload.color[j];
+                    float tmpDistance2 = payload.distance[j];
+                    payload.color[j] = tmpColor;
+                    payload.distance[j] = tmpDistance;
+                    tmpColor = tmpColor2;
+                    tmpDistance = tmpDistance2;
+                }
+            }
+            break;
+        }
+        else
+        {
+            if (payload.color[i].w == 1.f)
+            {
+                found = true;
+                break;
+            }
+        }
+    }
+    if (!found && payload.hitCount < MAX_TRANSPACENT_HITS)
+    {
+        payload.color[payload.hitCount] = color;
+        payload.distance[payload.hitCount] = distance;
+        payload.hitCount++;
+    }
+    if (color.w < 1.f)
+    {
+        IgnoreHit();
+    }
+}

+ 4 - 1
Common.hlsl

@@ -5,10 +5,13 @@
 // D3D12_RAYTRACING_SHADER_CONFIG pipeline subobjet.
 
 #pragma pack_matrix(row_major)
+#define MAX_TRANSPACENT_HITS 5
 
 struct [raypayload] HitInfo
 {
-    float4 colorAndDistance : write(caller, closesthit, miss) : read(caller);
+    float4 color[MAX_TRANSPACENT_HITS] : write(caller, closesthit, anyhit, miss) : read(caller, anyhit, closesthit, miss);
+float distance[MAX_TRANSPACENT_HITS] : write(caller, closesthit, anyhit) : read(caller, anyhit, closesthit);
+uint hitCount : write(caller, anyhit, closesthit, miss) : read(caller, anyhit, closesthit, miss);
 };
 
 // Attributes output by the raytracing when hitting a surface,

+ 1 - 0
DX11Texture.h

@@ -1,5 +1,6 @@
 #pragma once
 
+#include "Critical.h"
 #include "Texture.h"
 
 struct ID3D11Texture2D;

+ 1127 - 0
DX12DefaultAnyHitShader.h

@@ -0,0 +1,1127 @@
+#if 0
+; shader debug name: x64\Debug\DX12DefaultAnyHitShader.pdb
+; shader hash: d790765ffc87abe7d5e8065ef0b29dfc
+;
+; Buffer Definitions:
+;
+; Resource bind info for textureIdBuffer
+; {
+;
+;   int $Element;                                     ; Offset:    0 Size:     4
+;
+; }
+;
+; Resource bind info for indexBuffer
+; {
+;
+;   int $Element;                                     ; Offset:    0 Size:     4
+;
+; }
+;
+; Resource bind info for vertexData
+; {
+;
+;   struct struct.VertexData
+;   {
+;
+;       float2 texcoord;                              ; Offset:    0
+;       float3 normal;                                ; Offset:    8
+;   
+;   } $Element;                                       ; Offset:    0 Size:    20
+;
+; }
+;
+; Resource bind info for polygonSizeBuffer
+; {
+;
+;   int $Element;                                     ; Offset:    0 Size:     4
+;
+; }
+;
+;
+; Resource Bindings:
+;
+; Name                                 Type  Format         Dim      ID      HLSL Bind  Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+; gSampler                          sampler      NA          NA      S0             s0     1
+; textures                          texture     f32          2d      T0      t0,space1unbounded
+; textureIdBuffer                   texture  struct         r/o      T1      t1,space2     1
+; indexBuffer                       texture  struct         r/o      T2      t1,space3     1
+; vertexData                        texture  struct         r/o      T3      t1,space4     1
+; polygonSizeBuffer                 texture  struct         r/o      T4      t1,space5     1
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%dx.types.Handle = type { i8* }
+%struct.HitInfo = type { [5 x <4 x float>], [5 x float], i32 }
+%struct.Attributes = type { <2 x float> }
+%dx.types.ResourceProperties = type { i32, i32 }
+%dx.types.ResRet.i32 = type { i32, i32, i32, i32, i32 }
+%dx.types.ResRet.f32 = type { float, float, float, float, i32 }
+%"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" }
+%"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 }
+%"class.StructuredBuffer<int>" = type { i32 }
+%"class.StructuredBuffer<VertexData>" = type { %struct.VertexData }
+%struct.VertexData = type { <2 x float>, <3 x float> }
+%struct.SamplerState = type { i32 }
+
+@"\01?textures@@3PAV?$Texture2D@V?$vector@M$03@@@@A" = external constant [0 x %dx.types.Handle], align 4
+@"\01?gSampler@@3USamplerState@@A" = external constant %dx.types.Handle, align 4
+@"\01?textureIdBuffer@@3V?$StructuredBuffer@H@@A" = external constant %dx.types.Handle, align 4
+@"\01?indexBuffer@@3V?$StructuredBuffer@H@@A" = external constant %dx.types.Handle, align 4
+@"\01?vertexData@@3V?$StructuredBuffer@UVertexData@@@@A" = external constant %dx.types.Handle, align 4
+@"\01?polygonSizeBuffer@@3V?$StructuredBuffer@H@@A" = external constant %dx.types.Handle, align 4
+@dx.nothing.a = internal constant [1 x i32] zeroinitializer
+
+; Function Attrs: nounwind
+define void @"\01?AnyHit@@YAXUHitInfo@@UAttributes@@@Z"(%struct.HitInfo* noalias %payload, %struct.Attributes* %attrib) #0 {
+  %1 = load %dx.types.Handle, %dx.types.Handle* @"\01?gSampler@@3USamplerState@@A"
+  %2 = load %dx.types.Handle, %dx.types.Handle* @"\01?polygonSizeBuffer@@3V?$StructuredBuffer@H@@A"
+  %3 = load %dx.types.Handle, %dx.types.Handle* @"\01?vertexData@@3V?$StructuredBuffer@UVertexData@@@@A"
+  %4 = load %dx.types.Handle, %dx.types.Handle* @"\01?indexBuffer@@3V?$StructuredBuffer@H@@A"
+  %5 = load %dx.types.Handle, %dx.types.Handle* @"\01?textureIdBuffer@@3V?$StructuredBuffer@H@@A"
+  %6 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %7 = call i32 @dx.op.primitiveIndex.i32(i32 161)  ; PrimitiveIndex()
+  %8 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %9 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %10 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %11 = icmp sge i32 %7, 0
+  br i1 %11, label %12, label %34
+
+; <label>:12                                      ; preds = %0
+  br label %13
+
+; <label>:13                                      ; preds = %27, %12
+  %14 = phi i32 [ 0, %12 ], [ %28, %27 ]
+  %15 = phi i32 [ %7, %12 ], [ %20, %27 ]
+  %16 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %2)  ; CreateHandleForLib(Resource)
+  %17 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %16, %dx.types.ResourceProperties { i32 12, i32 4 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=4>
+  %18 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %17, i32 %14, i32 0, i8 1, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %19 = extractvalue %dx.types.ResRet.i32 %18, 0
+  %20 = sub nsw i32 %15, %19
+  %21 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %22 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %5)  ; CreateHandleForLib(Resource)
+  %23 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %22, %dx.types.ResourceProperties { i32 12, i32 4 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=4>
+  %24 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %23, i32 %14, i32 0, i8 1, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %25 = extractvalue %dx.types.ResRet.i32 %24, 0
+  %26 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  br label %27
+
+; <label>:27                                      ; preds = %13
+  %28 = add nsw i32 %14, 1
+  %29 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %30 = icmp sge i32 %20, 0
+  %31 = icmp ne i1 %30, false
+  %32 = icmp ne i1 %31, false
+  br i1 %32, label %13, label %33
+
+; <label>:33                                      ; preds = %27
+  br label %34
+
+; <label>:34                                      ; preds = %33, %0
+  %35 = phi i32 [ %25, %33 ], [ 0, %0 ]
+  %36 = getelementptr inbounds [0 x %dx.types.Handle], [0 x %dx.types.Handle]* @"\01?textures@@3PAV?$Texture2D@V?$vector@M$03@@@@A", i32 0, i32 %35
+  %37 = load %dx.types.Handle, %dx.types.Handle* %36
+  %38 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %39 = call i32 @dx.op.primitiveIndex.i32(i32 161)  ; PrimitiveIndex()
+  %40 = mul i32 %39, 3
+  %41 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %42 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %4)  ; CreateHandleForLib(Resource)
+  %43 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %42, %dx.types.ResourceProperties { i32 12, i32 4 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=4>
+  %44 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %43, i32 %40, i32 0, i8 1, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %45 = extractvalue %dx.types.ResRet.i32 %44, 0
+  %46 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %3)  ; CreateHandleForLib(Resource)
+  %47 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %46, %dx.types.ResourceProperties { i32 524, i32 20 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=20>
+  %48 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %49 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %47, i32 %45, i32 0, i8 3, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %50 = extractvalue %dx.types.ResRet.f32 %49, 0
+  %51 = extractvalue %dx.types.ResRet.f32 %49, 1
+  %52 = add nsw i32 %40, 1
+  %53 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %4)  ; CreateHandleForLib(Resource)
+  %54 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %53, %dx.types.ResourceProperties { i32 12, i32 4 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=4>
+  %55 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %54, i32 %52, i32 0, i8 1, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %56 = extractvalue %dx.types.ResRet.i32 %55, 0
+  %57 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %3)  ; CreateHandleForLib(Resource)
+  %58 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %57, %dx.types.ResourceProperties { i32 524, i32 20 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=20>
+  %59 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %60 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %58, i32 %56, i32 0, i8 3, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %61 = extractvalue %dx.types.ResRet.f32 %60, 0
+  %62 = extractvalue %dx.types.ResRet.f32 %60, 1
+  %63 = add nsw i32 %40, 2
+  %64 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %4)  ; CreateHandleForLib(Resource)
+  %65 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %64, %dx.types.ResourceProperties { i32 12, i32 4 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=4>
+  %66 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %65, i32 %63, i32 0, i8 1, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %67 = extractvalue %dx.types.ResRet.i32 %66, 0
+  %68 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %3)  ; CreateHandleForLib(Resource)
+  %69 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %68, %dx.types.ResourceProperties { i32 524, i32 20 })  ; AnnotateHandle(res,props)  resource: StructuredBuffer<stride=20>
+  %70 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %71 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %69, i32 %67, i32 0, i8 3, i32 4)  ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
+  %72 = extractvalue %dx.types.ResRet.f32 %71, 0
+  %73 = extractvalue %dx.types.ResRet.f32 %71, 1
+  %74 = getelementptr inbounds %struct.Attributes, %struct.Attributes* %attrib, i32 0, i32 0
+  %75 = load <2 x float>, <2 x float>* %74, align 4
+  %76 = extractelement <2 x float> %75, i32 0
+  %77 = fsub fast float 1.000000e+00, %76
+  %78 = getelementptr inbounds %struct.Attributes, %struct.Attributes* %attrib, i32 0, i32 0
+  %79 = load <2 x float>, <2 x float>* %78, align 4
+  %80 = extractelement <2 x float> %79, i32 1
+  %81 = fsub fast float %77, %80
+  %82 = fmul fast float %50, %81
+  %83 = fmul fast float %51, %81
+  %84 = getelementptr inbounds %struct.Attributes, %struct.Attributes* %attrib, i32 0, i32 0
+  %85 = load <2 x float>, <2 x float>* %84, align 4
+  %86 = extractelement <2 x float> %85, i32 0
+  %87 = extractelement <2 x float> %85, i32 0
+  %88 = fmul fast float %61, %86
+  %89 = fmul fast float %62, %87
+  %90 = fadd fast float %82, %88
+  %91 = fadd fast float %83, %89
+  %92 = getelementptr inbounds %struct.Attributes, %struct.Attributes* %attrib, i32 0, i32 0
+  %93 = load <2 x float>, <2 x float>* %92, align 4
+  %94 = extractelement <2 x float> %93, i32 1
+  %95 = extractelement <2 x float> %93, i32 1
+  %96 = fmul fast float %72, %94
+  %97 = fmul fast float %73, %95
+  %98 = fadd fast float %90, %96
+  %99 = fadd fast float %91, %97
+  %100 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %101 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %37)  ; CreateHandleForLib(Resource)
+  %102 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %101, %dx.types.ResourceProperties { i32 2, i32 1033 })  ; AnnotateHandle(res,props)  resource: Texture2D<4xF32>
+  %103 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %1)  ; CreateHandleForLib(Resource)
+  %104 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %103, %dx.types.ResourceProperties { i32 14, i32 0 })  ; AnnotateHandle(res,props)  resource: SamplerState
+  %105 = call %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32 62, %dx.types.Handle %102, %dx.types.Handle %104, float %98, float %99, float undef, float undef, i32 0, i32 0, i32 undef, float 0.000000e+00)  ; SampleLevel(srv,sampler,coord0,coord1,coord2,coord3,offset0,offset1,offset2,LOD)
+  %106 = extractvalue %dx.types.ResRet.f32 %105, 0
+  %107 = insertelement <4 x float> undef, float %106, i64 0
+  %108 = extractvalue %dx.types.ResRet.f32 %105, 1
+  %109 = insertelement <4 x float> %107, float %108, i64 1
+  %110 = extractvalue %dx.types.ResRet.f32 %105, 2
+  %111 = insertelement <4 x float> %109, float %110, i64 2
+  %112 = extractvalue %dx.types.ResRet.f32 %105, 3
+  %113 = insertelement <4 x float> %111, float %112, i64 3
+  %114 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %115 = fcmp fast oeq float %112, 0.000000e+00
+  %116 = icmp ne i1 %115, false
+  %117 = icmp ne i1 %116, false
+  br i1 %117, label %118, label %119
+
+; <label>:118                                     ; preds = %34
+  call void @dx.op.ignoreHit(i32 155)  ; IgnoreHit()
+  ret void
+
+; <label>:119                                     ; preds = %34
+  %120 = call float @dx.op.rayTCurrent.f32(i32 154)  ; RayTCurrent()
+  %121 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %122 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %123 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %124 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %125 = load i32, i32* %124, align 4
+  %126 = icmp ult i32 0, %125
+  br i1 %126, label %127, label %229
+
+; <label>:127                                     ; preds = %119
+  br label %128
+
+; <label>:128                                     ; preds = %219, %127
+  %129 = phi i32 [ 0, %127 ], [ %129, %219 ]
+  %130 = phi i32 [ 0, %127 ], [ %220, %219 ]
+  %131 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1, i32 %130
+  %132 = load float, float* %131, align 4
+  %133 = fcmp fast ogt float %132, %120
+  %134 = icmp ne i1 %133, false
+  %135 = icmp ne i1 %134, false
+  br i1 %135, label %136, label %208
+
+; <label>:136                                     ; preds = %128
+  %137 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %138 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0, i32 %130
+  %139 = load <4 x float>, <4 x float>* %138, align 4
+  %140 = extractelement <4 x float> %139, i32 0
+  %141 = extractelement <4 x float> %139, i32 1
+  %142 = extractelement <4 x float> %139, i32 2
+  %143 = extractelement <4 x float> %139, i32 3
+  %144 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %145 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0, i32 %130
+  %146 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store <4 x float> %113, <4 x float>* %145, align 4
+  %147 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1, i32 %130
+  %148 = load float, float* %147, align 4
+  %149 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %150 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1, i32 %130
+  %151 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store float %120, float* %150, align 4
+  %152 = fcmp fast oeq float %112, 1.000000e+00
+  %153 = icmp ne i1 %152, false
+  %154 = icmp ne i1 %153, false
+  br i1 %154, label %155, label %159
+
+; <label>:155                                     ; preds = %136
+  %156 = add nsw i32 %130, 1
+  %157 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %158 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store i32 %156, i32* %157, align 4
+  br label %207
+
+; <label>:159                                     ; preds = %136
+  %160 = add nsw i32 %130, 1
+  %161 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  br label %162
+
+; <label>:162                                     ; preds = %203, %159
+  %163 = phi float [ %140, %159 ], [ %189, %203 ]
+  %164 = phi float [ %141, %159 ], [ %190, %203 ]
+  %165 = phi float [ %142, %159 ], [ %191, %203 ]
+  %166 = phi float [ %143, %159 ], [ %192, %203 ]
+  %167 = phi float [ %148, %159 ], [ %195, %203 ]
+  %168 = phi i32 [ %160, %159 ], [ %204, %203 ]
+  %169 = insertelement <4 x float> undef, float %163, i32 0
+  %170 = insertelement <4 x float> %169, float %164, i32 1
+  %171 = insertelement <4 x float> %170, float %165, i32 2
+  %172 = insertelement <4 x float> %171, float %166, i32 3
+  %173 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %174 = load i32, i32* %173, align 4
+  %175 = add i32 %174, 1
+  %176 = icmp ult i32 %168, %175
+  %177 = icmp ne i1 %176, false
+  %178 = icmp ne i1 %177, false
+  br i1 %178, label %179, label %183
+
+; <label>:179                                     ; preds = %162
+  %180 = icmp slt i32 %168, 5
+  %181 = icmp ne i1 %180, false
+  %182 = icmp ne i1 %181, false
+  br label %183
+
+; <label>:183                                     ; preds = %179, %162
+  %184 = phi i1 [ false, %162 ], [ %182, %179 ]
+  %185 = icmp ne i1 %184, false
+  br i1 %185, label %186, label %206
+
+; <label>:186                                     ; preds = %183
+  %187 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0, i32 %168
+  %188 = load <4 x float>, <4 x float>* %187, align 4
+  %189 = extractelement <4 x float> %188, i32 0
+  %190 = extractelement <4 x float> %188, i32 1
+  %191 = extractelement <4 x float> %188, i32 2
+  %192 = extractelement <4 x float> %188, i32 3
+  %193 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %194 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1, i32 %168
+  %195 = load float, float* %194, align 4
+  %196 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %197 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0, i32 %168
+  %198 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store <4 x float> %172, <4 x float>* %197, align 4
+  %199 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1, i32 %168
+  %200 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store float %167, float* %199, align 4
+  %201 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %202 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  br label %203
+
+; <label>:203                                     ; preds = %186
+  %204 = add nsw i32 %168, 1
+  %205 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  br label %162
+
+; <label>:206                                     ; preds = %183
+  br label %207
+
+; <label>:207                                     ; preds = %206, %155
+  br label %227
+
+; <label>:208                                     ; preds = %128
+  %209 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0, i32 %130
+  %210 = load <4 x float>, <4 x float>* %209, align 4
+  %211 = extractelement <4 x float> %210, i32 3
+  %212 = fcmp fast oeq float %211, 1.000000e+00
+  %213 = icmp ne i1 %212, false
+  %214 = icmp ne i1 %213, false
+  br i1 %214, label %215, label %217
+
+; <label>:215                                     ; preds = %208
+  %216 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  br label %226
+
+; <label>:217                                     ; preds = %208
+  br label %218
+
+; <label>:218                                     ; preds = %217
+  br label %219
+
+; <label>:219                                     ; preds = %218
+  %220 = add nsw i32 %130, 1
+  %221 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %222 = load i32, i32* %124, align 4
+  %223 = icmp ult i32 %220, %222
+  %224 = icmp ne i1 %223, false
+  %225 = icmp ne i1 %224, false
+  br i1 %225, label %128, label %228
+
+; <label>:226                                     ; preds = %215
+  br label %229
+
+; <label>:227                                     ; preds = %207
+  br label %229
+
+; <label>:228                                     ; preds = %219
+  br label %229
+
+; <label>:229                                     ; preds = %228, %227, %226, %119
+  %230 = phi i32 [ 1, %227 ], [ %129, %228 ], [ 1, %226 ], [ 0, %119 ]
+  %231 = icmp ne i32 %230, 0
+  br i1 %231, label %251, label %232
+
+; <label>:232                                     ; preds = %229
+  %233 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %234 = load i32, i32* %233, align 4
+  %235 = icmp ult i32 %234, 5
+  %236 = icmp ne i1 %235, false
+  %237 = icmp ne i1 %236, false
+  br i1 %237, label %238, label %251
+
+; <label>:238                                     ; preds = %232
+  %239 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %240 = load i32, i32* %239, align 4
+  %241 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0, i32 %240
+  %242 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store <4 x float> %113, <4 x float>* %241, align 4
+  %243 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %244 = load i32, i32* %243, align 4
+  %245 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1, i32 %244
+  %246 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store float %120, float* %245, align 4
+  %247 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %248 = load i32, i32* %247, align 4
+  %249 = add i32 %248, 1
+  %250 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store i32 %249, i32* %247, align 4
+  br label %251
+
+; <label>:251                                     ; preds = %238, %232, %229
+  %252 = fcmp fast olt float %112, 1.000000e+00
+  %253 = icmp ne i1 %252, false
+  %254 = icmp ne i1 %253, false
+  br i1 %254, label %255, label %256
+
+; <label>:255                                     ; preds = %251
+  call void @dx.op.ignoreHit(i32 155)  ; IgnoreHit()
+  ret void
+
+; <label>:256                                     ; preds = %251
+  %257 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  ret void
+}
+
+; Function Attrs: nounwind readnone
+declare i32 @dx.op.primitiveIndex.i32(i32) #1
+
+; Function Attrs: nounwind readonly
+declare %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32, %dx.types.Handle, i32, i32, i8, i32) #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32, %dx.types.Handle, i32, i32, i8, i32) #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.ResRet.f32 @dx.op.sampleLevel.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2
+
+; Function Attrs: noreturn nounwind
+declare void @dx.op.ignoreHit(i32) #3
+
+; Function Attrs: nounwind readonly
+declare float @dx.op.rayTCurrent.f32(i32) #2
+
+; Function Attrs: nounwind readnone
+declare %dx.types.Handle @dx.op.annotateHandle(i32, %dx.types.Handle, %dx.types.ResourceProperties) #1
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32, %dx.types.Handle) #2
+
+attributes #0 = { nounwind }
+attributes #1 = { nounwind readnone }
+attributes #2 = { nounwind readonly }
+attributes #3 = { noreturn nounwind }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!1}
+!dx.shaderModel = !{!2}
+!dx.resources = !{!3}
+!dx.typeAnnotations = !{!15}
+!dx.dxrPayloadAnnotations = !{!21}
+!dx.entryPoints = !{!25, !27}
+
+!0 = !{!"dxcoob 1.8.2502.11 (239921522)"}
+!1 = !{i32 1, i32 8}
+!2 = !{!"lib", i32 6, i32 8}
+!3 = !{!4, null, null, !13}
+!4 = !{!5, !7, !9, !10, !12}
+!5 = !{i32 0, [0 x %"class.Texture2D<vector<float, 4> >"]* bitcast ([0 x %dx.types.Handle]* @"\01?textures@@3PAV?$Texture2D@V?$vector@M$03@@@@A" to [0 x %"class.Texture2D<vector<float, 4> >"]*), !"textures", i32 1, i32 0, i32 -1, i32 2, i32 0, !6}
+!6 = !{i32 0, i32 9}
+!7 = !{i32 1, %"class.StructuredBuffer<int>"* bitcast (%dx.types.Handle* @"\01?textureIdBuffer@@3V?$StructuredBuffer@H@@A" to %"class.StructuredBuffer<int>"*), !"textureIdBuffer", i32 2, i32 1, i32 1, i32 12, i32 0, !8}
+!8 = !{i32 1, i32 4}
+!9 = !{i32 2, %"class.StructuredBuffer<int>"* bitcast (%dx.types.Handle* @"\01?indexBuffer@@3V?$StructuredBuffer@H@@A" to %"class.StructuredBuffer<int>"*), !"indexBuffer", i32 3, i32 1, i32 1, i32 12, i32 0, !8}
+!10 = !{i32 3, %"class.StructuredBuffer<VertexData>"* bitcast (%dx.types.Handle* @"\01?vertexData@@3V?$StructuredBuffer@UVertexData@@@@A" to %"class.StructuredBuffer<VertexData>"*), !"vertexData", i32 4, i32 1, i32 1, i32 12, i32 0, !11}
+!11 = !{i32 1, i32 20}
+!12 = !{i32 4, %"class.StructuredBuffer<int>"* bitcast (%dx.types.Handle* @"\01?polygonSizeBuffer@@3V?$StructuredBuffer@H@@A" to %"class.StructuredBuffer<int>"*), !"polygonSizeBuffer", i32 5, i32 1, i32 1, i32 12, i32 0, !8}
+!13 = !{!14}
+!14 = !{i32 0, %struct.SamplerState* bitcast (%dx.types.Handle* @"\01?gSampler@@3USamplerState@@A" to %struct.SamplerState*), !"gSampler", i32 0, i32 0, i32 1, i32 0, null}
+!15 = !{i32 1, void (%struct.HitInfo*, %struct.Attributes*)* @"\01?AnyHit@@YAXUHitInfo@@UAttributes@@@Z", !16}
+!16 = !{!17, !19, !20}
+!17 = !{i32 1, !18, !18}
+!18 = !{}
+!19 = !{i32 2, !18, !18}
+!20 = !{i32 0, !18, !18}
+!21 = !{i32 0, %struct.HitInfo undef, !22}
+!22 = !{!23, !24, !23}
+!23 = !{i32 0, i32 13107}
+!24 = !{i32 0, i32 12339}
+!25 = !{null, !"", null, !3, !26}
+!26 = !{i32 0, i64 17}
+!27 = !{void (%struct.HitInfo*, %struct.Attributes*)* @"\01?AnyHit@@YAXUHitInfo@@UAttributes@@@Z", !"\01?AnyHit@@YAXUHitInfo@@UAttributes@@@Z", null, null, !28}
+!28 = !{i32 8, i32 9, i32 6, i32 104, i32 7, i32 8, i32 5, !29}
+!29 = !{i32 0}
+
+#endif
+
+const unsigned char DX12DefaultAnyHitShaderBytes[] = {
+  0x44, 0x58, 0x42, 0x43, 0x2e, 0x0e, 0x15, 0x90, 0x3e, 0xd7, 0xf2, 0xf4,
+  0xee, 0xb5, 0x2a, 0xb0, 0x25, 0xbc, 0xaa, 0x9e, 0x01, 0x00, 0x00, 0x00,
+  0xfc, 0x1d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00,
+  0x84, 0x0d, 0x00, 0x00, 0xb8, 0x0d, 0x00, 0x00, 0xd4, 0x0d, 0x00, 0x00,
+  0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x28, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x12, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x32, 0x33, 0x39, 0x39, 0x32, 0x31, 0x35, 0x32,
+  0x00, 0x31, 0x2e, 0x38, 0x2e, 0x32, 0x35, 0x30, 0x32, 0x2e, 0x31, 0x31,
+  0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0x41, 0x54, 0xd4, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x9c, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x67, 0x53, 0x61,
+  0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72,
+  0x65, 0x73, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64,
+  0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x00, 0x69, 0x6e, 0x64, 0x65, 0x78,
+  0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x00, 0x76, 0x65, 0x72, 0x74, 0x65,
+  0x78, 0x44, 0x61, 0x74, 0x61, 0x00, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f,
+  0x6e, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x00,
+  0x01, 0x3f, 0x41, 0x6e, 0x79, 0x48, 0x69, 0x74, 0x40, 0x40, 0x59, 0x41,
+  0x58, 0x55, 0x48, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x40, 0x40, 0x55,
+  0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x40, 0x40,
+  0x40, 0x5a, 0x00, 0x41, 0x6e, 0x79, 0x48, 0x69, 0x74, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+  0x09, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+  0x63, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+  0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+  0x53, 0x54, 0x41, 0x54, 0x24, 0x0b, 0x00, 0x00, 0x68, 0x00, 0x06, 0x00,
+  0xc9, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x08, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x0c, 0x0b, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde,
+  0x21, 0x0c, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
+  0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
+  0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02,
+  0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b,
+  0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5,
+  0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50,
+  0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06,
+  0x51, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1b, 0x88, 0x20, 0x00,
+  0x92, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30,
+  0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa0, 0x36, 0x18, 0xc4,
+  0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x54, 0x1b, 0x8c, 0xe2, 0xff,
+  0xff, 0xff, 0xff, 0x07, 0x20, 0x02, 0x24, 0x00, 0x49, 0x18, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x98, 0x10, 0x0c, 0x13, 0x02,
+  0x62, 0x42, 0x50, 0x00, 0x89, 0x20, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
+  0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84,
+  0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c,
+  0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xd8, 0xc1, 0x1c, 0x01, 0x42, 0xc0, 0x3d,
+  0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x7e, 0x08, 0x34, 0xc3, 0x42, 0xa0,
+  0x20, 0x48, 0x00, 0x81, 0x06, 0x12, 0xe6, 0x08, 0xc0, 0x20, 0x03, 0x0c,
+  0x3a, 0x46, 0x00, 0x66, 0x00, 0x86, 0x11, 0x08, 0x25, 0x0b, 0x96, 0x2c,
+  0x50, 0xce, 0x91, 0xa6, 0x88, 0x12, 0x26, 0x3f, 0x44, 0x26, 0xb1, 0x29,
+  0x1c, 0x34, 0x30, 0x8d, 0x41, 0xce, 0x30, 0x82, 0xa0, 0x5c, 0x24, 0x4d,
+  0x11, 0x25, 0x4c, 0xbe, 0x36, 0x4d, 0x11, 0x12, 0x50, 0x13, 0x21, 0xa1,
+  0x00, 0xa2, 0xa8, 0x0c, 0xc9, 0x23, 0xd1, 0x54, 0x04, 0xc3, 0xa0, 0xea,
+  0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98,
+  0x7c, 0xe4, 0xb6, 0x51, 0x61, 0x18, 0x86, 0x61, 0x94, 0xe3, 0x32, 0x04,
+  0xc3, 0x00, 0x0c, 0xc2, 0x6e, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2,
+  0x57, 0x42, 0x5a, 0x89, 0xc9, 0x2f, 0x6e, 0x1b, 0x15, 0x8a, 0xa2, 0x28,
+  0x46, 0x39, 0x34, 0x43, 0x30, 0x0c, 0xc0, 0xa0, 0xad, 0x30, 0x9a, 0x21,
+  0x08, 0x8a, 0xa2, 0x28, 0x86, 0x61, 0x28, 0xd4, 0x15, 0x21, 0x31, 0xe8,
+  0x2b, 0x82, 0x62, 0x50, 0x78, 0xdb, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92,
+  0xbf, 0x12, 0x92, 0x43, 0x45, 0x02, 0x91, 0x46, 0xce, 0x43, 0x44, 0x13,
+  0x42, 0x48, 0x48, 0x30, 0x8c, 0x42, 0x08, 0x86, 0x30, 0x12, 0x59, 0x06,
+  0xc1, 0x10, 0xc8, 0x1c, 0x08, 0x98, 0xa9, 0x0d, 0xc6, 0x81, 0x1d, 0xc2,
+  0x61, 0x1e, 0xe6, 0xc1, 0x0d, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e, 0xea,
+  0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c, 0xc6,
+  0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d, 0xc2,
+  0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f, 0xf4,
+  0x40, 0x0f, 0xda, 0x21, 0x1d, 0xe0, 0x61, 0x1e, 0x7e, 0x81, 0x1e, 0xf2,
+  0x01, 0x1e, 0xca, 0x01, 0x05, 0xc6, 0x4c, 0x62, 0x30, 0x0e, 0xec, 0x10,
+  0x0e, 0xf3, 0x30, 0x0f, 0x6e, 0x40, 0x0b, 0xe5, 0x80, 0x0f, 0xf4, 0x50,
+  0x0f, 0xf2, 0x50, 0x0e, 0x72, 0x40, 0x0a, 0x7c, 0x60, 0x0f, 0xe5, 0x30,
+  0x0e, 0xf4, 0xf0, 0x0e, 0xf2, 0xc0, 0x07, 0xe6, 0xc0, 0x0e, 0xef, 0x10,
+  0x0e, 0xf4, 0xc0, 0x06, 0x60, 0x40, 0x07, 0x7e, 0x00, 0x06, 0x7e, 0x80,
+  0x84, 0x25, 0x4d, 0x00, 0x95, 0xd6, 0x99, 0xb6, 0x71, 0x60, 0x87, 0x70,
+  0x98, 0x87, 0x79, 0x70, 0x83, 0x59, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x71,
+  0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x20, 0x07, 0x51, 0xa8, 0x07, 0x73,
+  0x30, 0x87, 0x72, 0x90, 0x07, 0x3e, 0x48, 0x07, 0x77, 0xa0, 0x07, 0x3f,
+  0x40, 0x81, 0x41, 0xed, 0x30, 0xc2, 0xa0, 0x5c, 0x24, 0x4d, 0x11, 0x25,
+  0x4c, 0xfe, 0x4b, 0x44, 0x13, 0x71, 0x75, 0xc0, 0x04, 0x20, 0x01, 0x7a,
+  0x67, 0x12, 0x83, 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79, 0x70, 0x83,
+  0x59, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x71, 0xa0, 0x87, 0x7a, 0x90, 0x87,
+  0x72, 0x20, 0x07, 0x51, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x07,
+  0x3e, 0xb0, 0x85, 0x72, 0x90, 0x07, 0x7a, 0x28, 0x07, 0x7c, 0x20, 0x85,
+  0x70, 0xa0, 0x87, 0x70, 0xf0, 0x03, 0x14, 0xc0, 0x14, 0xdf, 0x24, 0x4d,
+  0x11, 0x25, 0x4c, 0x3e, 0x0b, 0x30, 0xcf, 0x42, 0x44, 0xec, 0x04, 0x4c,
+  0x04, 0x0a, 0x0c, 0x9a, 0xe7, 0x08, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00,
+  0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79,
+  0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e,
+  0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07,
+  0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
+  0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07,
+  0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+  0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23,
+  0x45, 0x44, 0x00, 0x6e, 0x00, 0xc0, 0xd4, 0x00, 0x80, 0xa9, 0x01, 0x00,
+  0x53, 0x03, 0x00, 0xa6, 0x06, 0x00, 0x4c, 0x0d, 0x00, 0x98, 0x1f, 0xee,
+  0x60, 0x30, 0xe4, 0x99, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x60, 0xc8, 0x53, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0xc0, 0x90, 0x07, 0x03, 0x02, 0x60, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0xcf, 0x06, 0x04, 0xc0, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x9e, 0x0e, 0x08, 0x80, 0x01,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1f, 0x10, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0xc2, 0x00,
+  0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c,
+  0x64, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x43, 0x1e, 0x33, 0x00, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x80, 0x2c, 0x10, 0x1c, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18,
+  0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x32,
+  0x4a, 0xa0, 0x20, 0x46, 0x00, 0x8a, 0xa1, 0x06, 0x8a, 0xa0, 0x24, 0x0a,
+  0xa3, 0x10, 0xca, 0xa0, 0x50, 0x4a, 0xa1, 0x1c, 0x66, 0x00, 0x0a, 0xa7,
+  0x34, 0x0a, 0xa4, 0x60, 0x05, 0x0a, 0x34, 0xa0, 0x50, 0x05, 0xca, 0x9c,
+  0x39, 0xa0, 0xcc, 0x81, 0x03, 0x0a, 0x3a, 0xa0, 0x44, 0x0a, 0x93, 0xa0,
+  0xa0, 0xa8, 0x2e, 0x11, 0x72, 0x66, 0x00, 0x28, 0x9a, 0x01, 0x20, 0xd6,
+  0x96, 0x00, 0xa0, 0x76, 0x06, 0x80, 0x5c, 0xdb, 0x42, 0xc0, 0xb6, 0x18,
+  0xb0, 0x2d, 0x0a, 0x08, 0x9e, 0x01, 0xa0, 0x78, 0x06, 0x80, 0x64, 0xdb,
+  0x82, 0x80, 0x68, 0xdb, 0x22, 0x80, 0x8e, 0x11, 0x00, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90,
+  0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24,
+  0xc6, 0x05, 0xc7, 0x45, 0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04,
+  0x45, 0x66, 0x26, 0x27, 0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43,
+  0x10, 0x4c, 0x10, 0x0c, 0x68, 0x82, 0x60, 0x44, 0x1b, 0x84, 0x81, 0x98,
+  0x20, 0x18, 0xd2, 0x06, 0xc1, 0x30, 0x38, 0xb0, 0xa5, 0x89, 0x4d, 0x10,
+  0x8c, 0x69, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x81, 0x0d, 0xda, 0x80, 0x08,
+  0x5d, 0x19, 0x1e, 0x5d, 0x9d, 0x5c, 0xd9, 0xdc, 0x04, 0xc1, 0xa0, 0x26,
+  0x08, 0x46, 0x35, 0x41, 0x30, 0xac, 0x0d, 0x82, 0xf1, 0x6c, 0x48, 0x8c,
+  0x85, 0x19, 0x8c, 0xc6, 0x31, 0xa0, 0x09, 0x82, 0x1b, 0xbc, 0x01, 0x1f,
+  0xba, 0x32, 0x3c, 0xba, 0x3a, 0xb9, 0xb2, 0x24, 0x32, 0xa1, 0x3a, 0x33,
+  0xb3, 0x32, 0xb9, 0x09, 0x82, 0x71, 0x4d, 0x10, 0x0c, 0x6c, 0x83, 0x30,
+  0x54, 0x1b, 0x92, 0x41, 0x9a, 0x9c, 0x61, 0xa0, 0x0c, 0x6b, 0x82, 0xe0,
+  0x06, 0x70, 0xc0, 0x25, 0xcd, 0x8d, 0xac, 0x0c, 0x4f, 0xa8, 0xce, 0xcc,
+  0xac, 0x4c, 0x6e, 0x82, 0x60, 0x64, 0x1b, 0x12, 0x07, 0xcb, 0xb4, 0x61,
+  0xa0, 0x0c, 0x6b, 0x82, 0x20, 0x07, 0x74, 0x40, 0xc5, 0xae, 0x4c, 0x8e,
+  0xae, 0x0c, 0x8f, 0x28, 0x8c, 0x2e, 0x6c, 0x82, 0x60, 0x68, 0x1b, 0x84,
+  0xc1, 0xdb, 0x90, 0x68, 0x5c, 0x57, 0x0d, 0x03, 0x65, 0x7c, 0x13, 0x04,
+  0x37, 0x88, 0x03, 0x46, 0x70, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x53,
+  0x69, 0x7a, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x13, 0x04, 0x63,
+  0xdb, 0x90, 0x54, 0x61, 0x20, 0x06, 0x63, 0x30, 0x0c, 0x94, 0x61, 0x6d,
+  0x28, 0xa2, 0x6b, 0x03, 0x03, 0x32, 0x98, 0x20, 0xd0, 0x41, 0x1d, 0x10,
+  0x39, 0x9b, 0x0a, 0x6b, 0x83, 0x63, 0x2b, 0x93, 0xdb, 0x80, 0x18, 0x66,
+  0x70, 0x06, 0x86, 0x31, 0x18, 0xc0, 0x86, 0x00, 0x0d, 0x36, 0x10, 0x65,
+  0x00, 0x00, 0x69, 0x30, 0x41, 0x68, 0x03, 0x37, 0x60, 0x80, 0x36, 0x41,
+  0x30, 0xb8, 0x0d, 0x46, 0xc2, 0x06, 0x9a, 0xd1, 0x06, 0xd5, 0x04, 0xc1,
+  0xe8, 0x36, 0x08, 0xc6, 0x1b, 0x6c, 0x08, 0xe0, 0x60, 0x83, 0x60, 0xc4,
+  0xc1, 0x86, 0xa1, 0x72, 0x03, 0x39, 0x98, 0x20, 0xc4, 0xc1, 0x1c, 0x4c,
+  0x10, 0x0c, 0x6f, 0x03, 0x91, 0xb0, 0x81, 0x66, 0x4c, 0x10, 0xe0, 0x40,
+  0x0e, 0x36, 0x08, 0xc6, 0x1d, 0x6c, 0x08, 0xf0, 0x60, 0x83, 0x60, 0xe4,
+  0xc1, 0x86, 0xa1, 0x0e, 0xec, 0x40, 0x0f, 0x88, 0xd0, 0x95, 0xe1, 0x8d,
+  0xbd, 0xbd, 0xc9, 0x91, 0x4d, 0x10, 0x8c, 0x6f, 0x03, 0x92, 0xf0, 0x81,
+  0x66, 0xb4, 0xc1, 0xd3, 0x07, 0x0e, 0x0d, 0xb7, 0x37, 0xb9, 0xb6, 0x30,
+  0xb6, 0x09, 0x82, 0x01, 0x06, 0x1b, 0x90, 0xe4, 0x0f, 0x34, 0x50, 0x68,
+  0x83, 0xa7, 0x0f, 0xb4, 0x0d, 0x43, 0x1d, 0xf8, 0x41, 0x28, 0x4c, 0x10,
+  0x9c, 0x35, 0x98, 0x20, 0x18, 0x61, 0xc0, 0x62, 0xec, 0x8d, 0xed, 0x4d,
+  0x6e, 0x03, 0x92, 0x94, 0x82, 0x66, 0xb4, 0xc1, 0xd3, 0x07, 0x15, 0x11,
+  0xb2, 0xb4, 0x39, 0xba, 0x30, 0xb7, 0xb1, 0xb2, 0x09, 0x82, 0x21, 0x06,
+  0x1b, 0x8c, 0xe4, 0x14, 0x34, 0x54, 0x68, 0x83, 0x87, 0x08, 0x5a, 0x1a,
+  0xdd, 0xd0, 0x5b, 0x9d, 0x1b, 0xdd, 0x04, 0xc1, 0x18, 0x83, 0x0d, 0x46,
+  0xa2, 0x0a, 0xda, 0x2a, 0xb4, 0xc1, 0x18, 0x6c, 0x20, 0x48, 0xc1, 0x14,
+  0x52, 0x81, 0x15, 0x26, 0x08, 0x11, 0x1b, 0x90, 0x10, 0x0b, 0x93, 0xcb,
+  0xdb, 0x80, 0x24, 0xaf, 0xa0, 0x19, 0x6d, 0xf0, 0xf4, 0x81, 0xb3, 0x41,
+  0x20, 0x60, 0x61, 0xc3, 0x62, 0xac, 0xc1, 0x1c, 0xd0, 0xc1, 0x1e, 0xdc,
+  0x81, 0x28, 0x8c, 0x42, 0x2b, 0xb8, 0x42, 0x2c, 0x4c, 0x10, 0xa8, 0x63,
+  0x03, 0xb0, 0x61, 0x18, 0x68, 0x81, 0x16, 0x36, 0x0c, 0x0e, 0x2d, 0xd0,
+  0xc2, 0x86, 0xc1, 0xa0, 0x05, 0x5a, 0xd8, 0x30, 0xd4, 0x82, 0x2d, 0xdc,
+  0xc2, 0x86, 0x61, 0x98, 0x05, 0x5c, 0x98, 0x20, 0x18, 0x64, 0xb0, 0x41,
+  0x30, 0x74, 0x61, 0x82, 0x60, 0x94, 0xc1, 0x06, 0xc1, 0xe0, 0x85, 0x0d,
+  0xc3, 0x2e, 0xf4, 0xc2, 0x2e, 0x6c, 0x18, 0x8c, 0x51, 0xf0, 0x05, 0x02,
+  0x13, 0x84, 0x3a, 0x50, 0x83, 0x0d, 0x82, 0x11, 0x0e, 0x1b, 0x0a, 0x00,
+  0x1c, 0x00, 0x35, 0x10, 0x07, 0x9a, 0x41, 0xc0, 0x4f, 0x90, 0x5b, 0x1e,
+  0x52, 0x1a, 0x1d, 0x10, 0x50, 0x56, 0x10, 0x56, 0x15, 0x52, 0x1a, 0x5d,
+  0x92, 0x9b, 0xd9, 0x1b, 0x10, 0x50, 0x55, 0x10, 0x1d, 0x9d, 0x5c, 0x9a,
+  0x58, 0x1d, 0x5d, 0xd9, 0x1c, 0x10, 0x10, 0x90, 0xd6, 0x04, 0xc1, 0x30,
+  0x83, 0x0d, 0x81, 0xb1, 0x01, 0x21, 0x9e, 0xa4, 0x1c, 0xda, 0x80, 0x18,
+  0x03, 0x73, 0xd8, 0x50, 0xcc, 0x02, 0x39, 0x00, 0xc0, 0x39, 0x10, 0x11,
+  0x93, 0x0b, 0x73, 0x1b, 0x43, 0x2b, 0x9b, 0xa3, 0x61, 0xc6, 0xf6, 0x16,
+  0x46, 0x37, 0x37, 0x41, 0x30, 0xce, 0x80, 0x45, 0x9a, 0xdb, 0x1c, 0xdd,
+  0xdc, 0x04, 0xc1, 0x40, 0x03, 0x12, 0x69, 0x6e, 0x74, 0x73, 0x13, 0x04,
+  0x23, 0x0d, 0x88, 0xd0, 0x95, 0xe1, 0x7d, 0xb1, 0xbd, 0x85, 0x91, 0x11,
+  0xa1, 0x2b, 0xc3, 0xfb, 0x72, 0x7b, 0x93, 0x6b, 0xdb, 0xc0, 0xa4, 0x43,
+  0x1f, 0xa8, 0xc3, 0x3a, 0xb0, 0x43, 0x3b, 0xb8, 0xc3, 0x3b, 0xc0, 0x03,
+  0x11, 0x0f, 0x43, 0x15, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32,
+  0x37, 0xba, 0x29, 0x41, 0x50, 0x85, 0x0c, 0xcf, 0xc5, 0xae, 0x4c, 0x6e,
+  0x2e, 0xed, 0xcd, 0x6d, 0x4a, 0x40, 0x34, 0x21, 0xc3, 0x73, 0xb1, 0x0b,
+  0x63, 0xb3, 0x2b, 0x93, 0x9b, 0x12, 0x18, 0x75, 0xc8, 0xf0, 0x5c, 0xe6,
+  0xd0, 0xc2, 0xc8, 0xca, 0xe4, 0x9a, 0xde, 0xc8, 0xca, 0xd8, 0xa6, 0x04,
+  0x49, 0x19, 0x32, 0x3c, 0x17, 0xb9, 0xb2, 0xb9, 0xb7, 0x3a, 0xb9, 0xb1,
+  0xb2, 0xb9, 0x29, 0x41, 0x1a, 0x54, 0x22, 0xc3, 0x73, 0xa1, 0xcb, 0x83,
+  0x2b, 0x0b, 0x72, 0x73, 0x7b, 0xa3, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b,
+  0x9b, 0x22, 0xc4, 0x02, 0x2e, 0x14, 0x23, 0xc3, 0x73, 0x21, 0xc3, 0x93,
+  0x83, 0x0a, 0xcb, 0x63, 0x7b, 0x0b, 0x23, 0x0b, 0x72, 0x73, 0x7b, 0xa3,
+  0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x12, 0xf8, 0x42, 0x1d, 0x32,
+  0x3c, 0x97, 0x32, 0x37, 0x3a, 0xb9, 0x3c, 0xa8, 0xb7, 0x34, 0x37, 0xba,
+  0xb9, 0x29, 0x82, 0x38, 0x9c, 0x43, 0x17, 0x32, 0x3c, 0x97, 0xb1, 0xb7,
+  0x3a, 0x37, 0xba, 0x32, 0xb9, 0xb9, 0x29, 0x41, 0x3c, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+  0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+  0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+  0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+  0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+  0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+  0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+  0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+  0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+  0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+  0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+  0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+  0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+  0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+  0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+  0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+  0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+  0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+  0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+  0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+  0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+  0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+  0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70,
+  0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60,
+  0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4,
+  0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x30, 0x83, 0x81,
+  0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d,
+  0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+  0x71, 0x00, 0x00, 0x00, 0x75, 0x60, 0x06, 0x81, 0x5f, 0xd0, 0x9d, 0x47,
+  0xa6, 0xe9, 0x40, 0x60, 0x36, 0x88, 0xad, 0x22, 0xd3, 0xf4, 0xa4, 0xdb,
+  0xfc, 0x06, 0x02, 0xab, 0x41, 0x3a, 0x5d, 0x9e, 0x16, 0xd7, 0xe9, 0xe5,
+  0x39, 0x10, 0x08, 0xd4, 0x56, 0x40, 0x17, 0xf8, 0x9d, 0xa7, 0xe1, 0x36,
+  0x9c, 0x5d, 0x96, 0x03, 0x81, 0xb3, 0xea, 0x34, 0xdc, 0x86, 0xb3, 0xcb,
+  0xf2, 0x29, 0x3d, 0x4c, 0x2f, 0x03, 0x81, 0xc1, 0x1a, 0x40, 0x83, 0xc0,
+  0x2f, 0xed, 0x26, 0x97, 0xf1, 0xc2, 0xba, 0xd9, 0x5c, 0x96, 0x03, 0x81,
+  0x33, 0xeb, 0x8f, 0x34, 0xa5, 0xcb, 0xeb, 0x63, 0x7a, 0x5d, 0x5e, 0x26,
+  0x0b, 0xeb, 0x66, 0x73, 0x59, 0x0e, 0x44, 0x02, 0x81, 0xc1, 0x2a, 0x70,
+  0x83, 0xc0, 0x0f, 0xfe, 0x66, 0xe7, 0xcf, 0x6f, 0xf7, 0x34, 0xad, 0x2f,
+  0x0b, 0xeb, 0x66, 0x73, 0x59, 0x0e, 0x04, 0xce, 0xac, 0x3f, 0xd2, 0x94,
+  0x2e, 0xaf, 0x8f, 0xe9, 0x75, 0x79, 0x99, 0x2c, 0xac, 0x9b, 0xcd, 0x65,
+  0x39, 0x10, 0x09, 0x04, 0x06, 0x4b, 0x80, 0x0d, 0x02, 0x3f, 0x7a, 0x19,
+  0x4f, 0xaf, 0xcb, 0xcb, 0x49, 0xb2, 0xb0, 0x6e, 0x36, 0x97, 0xe5, 0x40,
+  0xe0, 0xcc, 0xfa, 0x23, 0x4d, 0xe9, 0xf2, 0xfa, 0x98, 0x5e, 0x97, 0x97,
+  0xc9, 0xc2, 0xba, 0xd9, 0x5c, 0x96, 0x03, 0x91, 0x40, 0x60, 0xb0, 0x00,
+  0xde, 0x20, 0xf0, 0xa3, 0x97, 0xf1, 0xf4, 0xba, 0xbc, 0x3c, 0x07, 0x02,
+  0x67, 0xd0, 0xa0, 0xf5, 0x47, 0xa2, 0x96, 0xf1, 0xf4, 0xba, 0xbc, 0x2c,
+  0x23, 0x02, 0xad, 0x3f, 0x92, 0xbd, 0x3c, 0xa6, 0xbf, 0xe5, 0xc0, 0x26,
+  0x09, 0x36, 0x03, 0x02, 0x81, 0xc0, 0x60, 0x11, 0xcc, 0x41, 0xe0, 0x67,
+  0x2f, 0xcb, 0xe9, 0x65, 0x3c, 0x31, 0x4c, 0x0f, 0x03, 0x81, 0x33, 0xeb,
+  0x8f, 0x34, 0xa5, 0xcb, 0xeb, 0x63, 0x7a, 0x5d, 0x5e, 0x26, 0x0b, 0xeb,
+  0x66, 0x73, 0x59, 0x0e, 0xac, 0x5a, 0xcb, 0x72, 0x7a, 0x19, 0x4f, 0x0c,
+  0xd3, 0xc3, 0x40, 0x20, 0x10, 0x18, 0x34, 0x03, 0x66, 0xb8, 0xfc, 0xc6,
+  0x99, 0x0e, 0xa4, 0x31, 0x7c, 0xc0, 0x1c, 0xa8, 0xe1, 0xf2, 0x9d, 0xc7,
+  0x07, 0x9a, 0xc6, 0x99, 0x80, 0x89, 0x08, 0x81, 0x66, 0x58, 0x08, 0x7b,
+  0x40, 0x83, 0xe1, 0xf2, 0x9d, 0xc7, 0x17, 0x22, 0x02, 0x98, 0x88, 0x10,
+  0x68, 0x86, 0x85, 0xf8, 0x9c, 0xa8, 0x44, 0x02, 0x7f, 0xb8, 0xfc, 0x09,
+  0x7b, 0x08, 0xc9, 0x0f, 0x81, 0x66, 0x58, 0x08, 0x63, 0x78, 0x86, 0xcb,
+  0x77, 0x1e, 0x1f, 0x31, 0x1a, 0x27, 0x22, 0x42, 0x64, 0x32, 0x04, 0x6c,
+  0xb8, 0x7c, 0xe7, 0xf1, 0x9f, 0x08, 0x61, 0x90, 0x09, 0xa9, 0x08, 0xb1,
+  0x19, 0x88, 0xcb, 0x47, 0x6e, 0xdb, 0x14, 0xae, 0xe1, 0xf2, 0x9d, 0xc7,
+  0x8f, 0x00, 0x6b, 0xa3, 0x8a, 0x82, 0x88, 0x4a, 0x07, 0x18, 0xfc, 0xe2,
+  0xb6, 0x2d, 0xe1, 0x1a, 0x2e, 0xdf, 0x79, 0xfc, 0x08, 0xb0, 0x36, 0xaa,
+  0x28, 0x88, 0xa8, 0x74, 0x80, 0xc1, 0x47, 0x6e, 0xdb, 0x1a, 0xaa, 0xe1,
+  0xf2, 0x9d, 0xc7, 0x8f, 0x00, 0xac, 0xe5, 0xa8, 0x28, 0x22, 0x9a, 0xc9,
+  0x2f, 0x6e, 0xdb, 0x16, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x00, 0xe6,
+  0x59, 0x88, 0x92, 0xa8, 0x88, 0xc5, 0x2f, 0x6e, 0x1b, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x49, 0x4c, 0x44, 0x4e, 0x2c, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x25, 0x00, 0x78, 0x36, 0x34, 0x5c, 0x44, 0x65, 0x62, 0x75,
+  0x67, 0x5c, 0x44, 0x58, 0x31, 0x32, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c,
+  0x74, 0x41, 0x6e, 0x79, 0x48, 0x69, 0x74, 0x53, 0x68, 0x61, 0x64, 0x65,
+  0x72, 0x2e, 0x70, 0x64, 0x62, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48,
+  0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x90, 0x76, 0x5f,
+  0xfc, 0x87, 0xab, 0xe7, 0xd5, 0xe8, 0x06, 0x5e, 0xf0, 0xb2, 0x9d, 0xfc,
+  0x44, 0x58, 0x49, 0x4c, 0x20, 0x10, 0x00, 0x00, 0x68, 0x00, 0x06, 0x00,
+  0x08, 0x04, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x08, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde,
+  0x21, 0x0c, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
+  0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
+  0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02,
+  0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b,
+  0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5,
+  0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50,
+  0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06,
+  0x51, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1b, 0x88, 0x20, 0x00,
+  0x92, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30,
+  0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa0, 0x36, 0x18, 0xc4,
+  0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x54, 0x1b, 0x8c, 0xe2, 0xff,
+  0xff, 0xff, 0xff, 0x07, 0x20, 0x02, 0x24, 0x00, 0x49, 0x18, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x98, 0x10, 0x0c, 0x13, 0x02,
+  0x62, 0x42, 0x50, 0x00, 0x89, 0x20, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00,
+  0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84,
+  0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c,
+  0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xf0, 0xc1, 0x1c, 0x01, 0x42, 0xc0, 0x3d,
+  0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x7e, 0x08, 0x34, 0xc3, 0x42, 0xa0,
+  0x20, 0x48, 0x00, 0x81, 0x06, 0x12, 0xe6, 0x08, 0xc0, 0x20, 0x03, 0x0c,
+  0x3a, 0x46, 0x00, 0x66, 0x00, 0x86, 0x11, 0x08, 0x25, 0x0b, 0x96, 0x2c,
+  0x50, 0xce, 0x91, 0xa6, 0x88, 0x12, 0x26, 0x3f, 0x44, 0x26, 0xb1, 0x29,
+  0x1c, 0x34, 0x30, 0x8d, 0x41, 0xce, 0x30, 0x82, 0xa0, 0x5c, 0x24, 0x4d,
+  0x11, 0x25, 0x4c, 0xbe, 0x36, 0x4d, 0x11, 0x12, 0x50, 0x13, 0x21, 0xa1,
+  0x00, 0xa2, 0xa8, 0x0c, 0xc9, 0x23, 0xd1, 0x54, 0x04, 0xc3, 0xa0, 0xea,
+  0xa6, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x7f, 0x25, 0xa4, 0x95, 0x98,
+  0x7c, 0xe4, 0xb6, 0x51, 0x61, 0x18, 0x86, 0x61, 0x94, 0xe3, 0x32, 0x04,
+  0xc3, 0x00, 0x0c, 0xc2, 0x6e, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2,
+  0x57, 0x42, 0x5a, 0x89, 0xc9, 0x2f, 0x6e, 0x1b, 0x15, 0x8a, 0xa2, 0x28,
+  0x46, 0x39, 0x34, 0x43, 0x30, 0x0c, 0xc0, 0xa0, 0xad, 0x30, 0x9a, 0x21,
+  0x08, 0x8a, 0xa2, 0x28, 0x86, 0x61, 0x28, 0xd4, 0x15, 0x21, 0x31, 0xe8,
+  0x2b, 0x82, 0x62, 0x50, 0x78, 0xdb, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92,
+  0xbf, 0x12, 0x92, 0x43, 0x45, 0x02, 0x91, 0x46, 0xce, 0x43, 0x44, 0x13,
+  0x42, 0x48, 0x48, 0x30, 0x8c, 0x42, 0x08, 0x86, 0x30, 0x12, 0x59, 0x06,
+  0xc1, 0x10, 0xc8, 0x1c, 0x08, 0x98, 0xa9, 0x0d, 0xc6, 0x81, 0x1d, 0xc2,
+  0x61, 0x1e, 0xe6, 0xc1, 0x0d, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e, 0xea,
+  0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c, 0xc6,
+  0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d, 0xc2,
+  0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f, 0xf4,
+  0x40, 0x0f, 0xda, 0x21, 0x1d, 0xe0, 0x61, 0x1e, 0x7e, 0x81, 0x1e, 0xf2,
+  0x01, 0x1e, 0xca, 0x01, 0x05, 0xc6, 0x4c, 0x62, 0x30, 0x0e, 0xec, 0x10,
+  0x0e, 0xf3, 0x30, 0x0f, 0x6e, 0x40, 0x0b, 0xe5, 0x80, 0x0f, 0xf4, 0x50,
+  0x0f, 0xf2, 0x50, 0x0e, 0x72, 0x40, 0x0a, 0x7c, 0x60, 0x0f, 0xe5, 0x30,
+  0x0e, 0xf4, 0xf0, 0x0e, 0xf2, 0xc0, 0x07, 0xe6, 0xc0, 0x0e, 0xef, 0x10,
+  0x0e, 0xf4, 0xc0, 0x06, 0x60, 0x40, 0x07, 0x7e, 0x00, 0x06, 0x7e, 0x80,
+  0x84, 0x25, 0x4d, 0x00, 0x95, 0xd6, 0x99, 0xb6, 0x71, 0x60, 0x87, 0x70,
+  0x98, 0x87, 0x79, 0x70, 0x83, 0x59, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x71,
+  0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x20, 0x07, 0x51, 0xa8, 0x07, 0x73,
+  0x30, 0x87, 0x72, 0x90, 0x07, 0x3e, 0x48, 0x07, 0x77, 0xa0, 0x07, 0x3f,
+  0x40, 0x81, 0x41, 0xed, 0x30, 0xc2, 0xa0, 0x5c, 0x24, 0x4d, 0x11, 0x25,
+  0x4c, 0xfe, 0x4b, 0x44, 0x13, 0x71, 0x75, 0xc0, 0x04, 0x20, 0x01, 0x7a,
+  0x67, 0x12, 0x83, 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79, 0x70, 0x83,
+  0x59, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x71, 0xa0, 0x87, 0x7a, 0x90, 0x87,
+  0x72, 0x20, 0x07, 0x51, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x07,
+  0x3e, 0xb0, 0x85, 0x72, 0x90, 0x07, 0x7a, 0x28, 0x07, 0x7c, 0x20, 0x85,
+  0x70, 0xa0, 0x87, 0x70, 0xf0, 0x03, 0x14, 0xc0, 0x14, 0xdf, 0x24, 0x4d,
+  0x11, 0x25, 0x4c, 0x3e, 0x0b, 0x30, 0xcf, 0x42, 0x44, 0xec, 0x04, 0x4c,
+  0x04, 0x0a, 0x0c, 0x9a, 0xe7, 0x08, 0x40, 0x81, 0x8c, 0x39, 0x82, 0x60,
+  0x0a, 0x80, 0x20, 0x52, 0x68, 0x01, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0,
+  0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0,
+  0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d,
+  0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
+  0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78,
+  0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a,
+  0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73,
+  0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+  0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
+  0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6,
+  0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78,
+  0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76,
+  0x40, 0x07, 0x3a, 0x0f, 0x64, 0x90, 0x21, 0x23, 0x45, 0x44, 0x00, 0x6e,
+  0x00, 0xc0, 0xd4, 0x00, 0x80, 0xa9, 0x01, 0x00, 0x53, 0x03, 0x00, 0xa6,
+  0x06, 0x00, 0x4c, 0x0d, 0x00, 0x98, 0x1f, 0xd2, 0x60, 0x30, 0xe4, 0x99,
+  0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8,
+  0x53, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+  0x90, 0x07, 0x03, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0x21, 0xcf, 0x06, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x43, 0x9e, 0x0e, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x86, 0x3c, 0x1f, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0xc2, 0x00, 0x08, 0x80, 0x01, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x64, 0x00, 0x04, 0x80,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x33, 0x00,
+  0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2c, 0x10,
+  0x14, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90,
+  0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x32, 0x4a, 0xa0, 0x20, 0x8a,
+  0x61, 0x04, 0xa0, 0x06, 0x8a, 0xa0, 0x24, 0x0a, 0xa3, 0x10, 0xca, 0xa0,
+  0x50, 0x4a, 0xa1, 0xcc, 0x99, 0x03, 0xca, 0x1c, 0x38, 0xa0, 0xa0, 0x03,
+  0xca, 0x81, 0xea, 0x12, 0x21, 0x67, 0x06, 0x80, 0x58, 0x5b, 0x02, 0x80,
+  0x5c, 0xdb, 0x42, 0xc0, 0xb6, 0x18, 0xb0, 0x2d, 0x0a, 0x48, 0xb6, 0x2d,
+  0x08, 0x88, 0xb6, 0x2d, 0x02, 0xe8, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90,
+  0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24,
+  0xc6, 0x05, 0xc7, 0x45, 0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04,
+  0x45, 0x66, 0x26, 0x27, 0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43,
+  0x10, 0x4c, 0x10, 0x0c, 0x68, 0x82, 0x60, 0x44, 0x1b, 0x84, 0x81, 0xe0,
+  0xc0, 0x96, 0x26, 0x36, 0x41, 0x30, 0xa4, 0x0d, 0x83, 0x71, 0x10, 0x13,
+  0x04, 0x63, 0x9a, 0x20, 0xb0, 0x81, 0x18, 0x10, 0xa1, 0x2b, 0xc3, 0xa3,
+  0xab, 0x93, 0x2b, 0x9b, 0x9b, 0x20, 0x18, 0xd4, 0x04, 0xc1, 0xa8, 0x26,
+  0x08, 0x86, 0xb5, 0x41, 0x48, 0x9c, 0x0d, 0x49, 0xa2, 0x2c, 0x43, 0xc2,
+  0x34, 0xc9, 0x33, 0x41, 0x70, 0x83, 0x31, 0xe0, 0x43, 0x57, 0x86, 0x47,
+  0x57, 0x27, 0x57, 0x96, 0x44, 0x26, 0x54, 0x67, 0x66, 0x56, 0x26, 0x37,
+  0x41, 0x30, 0xae, 0x09, 0x82, 0x81, 0x6d, 0x10, 0x06, 0x6a, 0x43, 0x32,
+  0x44, 0x52, 0x33, 0x0c, 0x53, 0x52, 0x4d, 0x10, 0xdc, 0x80, 0x0c, 0xb8,
+  0xa4, 0xb9, 0x91, 0x95, 0xe1, 0x09, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x4d,
+  0x10, 0x8c, 0x6c, 0x43, 0xd2, 0x5c, 0x58, 0x36, 0x0c, 0x53, 0x52, 0x4d,
+  0x10, 0xe4, 0xc0, 0x0c, 0xa8, 0xd8, 0x95, 0xc9, 0xd1, 0x95, 0xe1, 0x11,
+  0x85, 0xd1, 0x85, 0x4d, 0x10, 0x0c, 0x6d, 0x83, 0x30, 0x74, 0x1b, 0x92,
+  0x6c, 0xe3, 0xa8, 0x61, 0x98, 0x12, 0x6f, 0x82, 0xe0, 0x06, 0x65, 0xc0,
+  0x08, 0xee, 0x8d, 0x2d, 0xef, 0xec, 0xcd, 0x6d, 0x2a, 0x4d, 0xaf, 0x4c,
+  0xa8, 0xce, 0xcc, 0xac, 0x4c, 0x6e, 0x82, 0x60, 0x6c, 0x1b, 0x12, 0x0a,
+  0x0c, 0xc2, 0x40, 0x0c, 0x86, 0x61, 0x4a, 0xaa, 0x0d, 0x05, 0x64, 0x69,
+  0xdf, 0x18, 0x4c, 0x10, 0xe8, 0xe0, 0x0c, 0x88, 0x9c, 0x4d, 0x85, 0xb5,
+  0xc1, 0xb1, 0x95, 0xc9, 0x6d, 0x40, 0x92, 0x32, 0x30, 0x83, 0x24, 0x19,
+  0x12, 0x60, 0x43, 0x70, 0x06, 0x1b, 0x08, 0x32, 0x00, 0x00, 0x34, 0x98,
+  0x20, 0x50, 0xc7, 0x06, 0x60, 0xc3, 0x30, 0xac, 0xc1, 0x1a, 0x6c, 0x18,
+  0x9a, 0x35, 0x58, 0x83, 0x0d, 0x43, 0xb2, 0x06, 0x6b, 0xb0, 0x61, 0x60,
+  0x83, 0x36, 0x70, 0x83, 0x0d, 0xc3, 0xa0, 0x06, 0x6f, 0x30, 0x41, 0x70,
+  0xc2, 0x60, 0x82, 0x60, 0x70, 0x1b, 0x84, 0x44, 0x0e, 0x26, 0x08, 0x46,
+  0xb7, 0x41, 0x48, 0xe8, 0x60, 0xc3, 0x30, 0x07, 0x75, 0x30, 0x07, 0x1b,
+  0x86, 0x24, 0x0e, 0xec, 0x80, 0xc0, 0x04, 0xa1, 0x0e, 0xc0, 0x60, 0x83,
+  0x90, 0xe4, 0xc1, 0x86, 0x02, 0xc0, 0x03, 0x20, 0x0d, 0xf4, 0x80, 0x66,
+  0x10, 0xf0, 0x13, 0xe4, 0x96, 0x87, 0x94, 0x46, 0x07, 0x04, 0x94, 0x15,
+  0x84, 0x55, 0x85, 0x94, 0x46, 0x97, 0xe4, 0x66, 0xf6, 0x06, 0x04, 0x54,
+  0x15, 0x44, 0x47, 0x27, 0x97, 0x26, 0x56, 0x47, 0x57, 0x36, 0x07, 0x04,
+  0x04, 0xa4, 0x35, 0x41, 0x30, 0xbc, 0x09, 0x82, 0xf1, 0x6d, 0x08, 0x92,
+  0x0d, 0x08, 0xe1, 0x1c, 0x7d, 0xe0, 0x07, 0x84, 0x18, 0xfc, 0xc1, 0x86,
+  0x42, 0x0d, 0xf8, 0x00, 0x00, 0x40, 0xa1, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b,
+  0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, 0x86, 0xe7,
+  0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, 0x90,
+  0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x88, 0x3a,
+  0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64,
+  0x65, 0x6c, 0x53, 0x82, 0xa3, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, 0xd9, 0xdc,
+  0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0x00, 0x0d, 0x2a, 0x91, 0xe1,
+  0xb9, 0xd0, 0xe5, 0xc1, 0x95, 0x05, 0xb9, 0xb9, 0xbd, 0xd1, 0x85, 0xd1,
+  0xa5, 0xbd, 0xb9, 0xcd, 0x4d, 0x09, 0xde, 0xa0, 0x18, 0x19, 0x9e, 0x0b,
+  0x19, 0x9e, 0x1c, 0x54, 0x58, 0x1e, 0xdb, 0x5b, 0x18, 0x59, 0x90, 0x9b,
+  0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x94, 0xc0, 0x0e,
+  0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5,
+  0xb9, 0xd1, 0xcd, 0x4d, 0x11, 0xf4, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+  0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+  0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+  0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+  0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+  0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+  0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+  0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+  0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+  0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+  0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+  0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+  0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+  0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+  0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+  0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+  0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+  0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+  0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+  0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+  0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+  0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+  0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70,
+  0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60,
+  0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4,
+  0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x30, 0x83, 0x81,
+  0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d,
+  0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+  0x71, 0x00, 0x00, 0x00, 0x75, 0x60, 0x06, 0x81, 0x5f, 0xd0, 0x9d, 0x47,
+  0xa6, 0xe9, 0x40, 0x60, 0x36, 0x88, 0xad, 0x22, 0xd3, 0xf4, 0xa4, 0xdb,
+  0xfc, 0x06, 0x02, 0xab, 0x41, 0x3a, 0x5d, 0x9e, 0x16, 0xd7, 0xe9, 0xe5,
+  0x39, 0x10, 0x08, 0xd4, 0x56, 0x40, 0x17, 0xf8, 0x9d, 0xa7, 0xe1, 0x36,
+  0x9c, 0x5d, 0x96, 0x03, 0x81, 0xb3, 0xea, 0x34, 0xdc, 0x86, 0xb3, 0xcb,
+  0xf2, 0x29, 0x3d, 0x4c, 0x2f, 0x03, 0x81, 0xc1, 0x1a, 0x40, 0x83, 0xc0,
+  0x2f, 0xed, 0x26, 0x97, 0xf1, 0xc2, 0xba, 0xd9, 0x5c, 0x96, 0x03, 0x81,
+  0x33, 0xeb, 0x8f, 0x34, 0xa5, 0xcb, 0xeb, 0x63, 0x7a, 0x5d, 0x5e, 0x26,
+  0x0b, 0xeb, 0x66, 0x73, 0x59, 0x0e, 0x44, 0x02, 0x81, 0xc1, 0x2a, 0x70,
+  0x83, 0xc0, 0x0f, 0xfe, 0x66, 0xe7, 0xcf, 0x6f, 0xf7, 0x34, 0xad, 0x2f,
+  0x0b, 0xeb, 0x66, 0x73, 0x59, 0x0e, 0x04, 0xce, 0xac, 0x3f, 0xd2, 0x94,
+  0x2e, 0xaf, 0x8f, 0xe9, 0x75, 0x79, 0x99, 0x2c, 0xac, 0x9b, 0xcd, 0x65,
+  0x39, 0x10, 0x09, 0x04, 0x06, 0x4b, 0x80, 0x0d, 0x02, 0x3f, 0x7a, 0x19,
+  0x4f, 0xaf, 0xcb, 0xcb, 0x49, 0xb2, 0xb0, 0x6e, 0x36, 0x97, 0xe5, 0x40,
+  0xe0, 0xcc, 0xfa, 0x23, 0x4d, 0xe9, 0xf2, 0xfa, 0x98, 0x5e, 0x97, 0x97,
+  0xc9, 0xc2, 0xba, 0xd9, 0x5c, 0x96, 0x03, 0x91, 0x40, 0x60, 0xb0, 0x00,
+  0xde, 0x20, 0xf0, 0xa3, 0x97, 0xf1, 0xf4, 0xba, 0xbc, 0x3c, 0x07, 0x02,
+  0x67, 0xd0, 0xa0, 0xf5, 0x47, 0xa2, 0x96, 0xf1, 0xf4, 0xba, 0xbc, 0x2c,
+  0x23, 0x02, 0xad, 0x3f, 0x92, 0xbd, 0x3c, 0xa6, 0xbf, 0xe5, 0xc0, 0x26,
+  0x09, 0x36, 0x03, 0x02, 0x81, 0xc0, 0x60, 0x11, 0xcc, 0x41, 0xe0, 0x67,
+  0x2f, 0xcb, 0xe9, 0x65, 0x3c, 0x31, 0x4c, 0x0f, 0x03, 0x81, 0x33, 0xeb,
+  0x8f, 0x34, 0xa5, 0xcb, 0xeb, 0x63, 0x7a, 0x5d, 0x5e, 0x26, 0x0b, 0xeb,
+  0x66, 0x73, 0x59, 0x0e, 0xac, 0x5a, 0xcb, 0x72, 0x7a, 0x19, 0x4f, 0x0c,
+  0xd3, 0xc3, 0x40, 0x20, 0x10, 0x18, 0x34, 0x03, 0x66, 0xb8, 0xfc, 0xc6,
+  0x99, 0x0e, 0xa4, 0x31, 0x7c, 0xc0, 0x1c, 0xa8, 0xe1, 0xf2, 0x9d, 0xc7,
+  0x07, 0x9a, 0xc6, 0x99, 0x80, 0x89, 0x08, 0x81, 0x66, 0x58, 0x08, 0x7b,
+  0x40, 0x83, 0xe1, 0xf2, 0x9d, 0xc7, 0x17, 0x22, 0x02, 0x98, 0x88, 0x10,
+  0x68, 0x86, 0x85, 0xf8, 0x9c, 0xa8, 0x44, 0x02, 0x7f, 0xb8, 0xfc, 0x09,
+  0x7b, 0x08, 0xc9, 0x0f, 0x81, 0x66, 0x58, 0x08, 0x63, 0x78, 0x86, 0xcb,
+  0x77, 0x1e, 0x1f, 0x31, 0x1a, 0x27, 0x22, 0x42, 0x64, 0x32, 0x04, 0x6c,
+  0xb8, 0x7c, 0xe7, 0xf1, 0x9f, 0x08, 0x61, 0x90, 0x09, 0xa9, 0x08, 0xb1,
+  0x19, 0x88, 0xcb, 0x47, 0x6e, 0xdb, 0x14, 0xae, 0xe1, 0xf2, 0x9d, 0xc7,
+  0x8f, 0x00, 0x6b, 0xa3, 0x8a, 0x82, 0x88, 0x4a, 0x07, 0x18, 0xfc, 0xe2,
+  0xb6, 0x2d, 0xe1, 0x1a, 0x2e, 0xdf, 0x79, 0xfc, 0x08, 0xb0, 0x36, 0xaa,
+  0x28, 0x88, 0xa8, 0x74, 0x80, 0xc1, 0x47, 0x6e, 0xdb, 0x1a, 0xaa, 0xe1,
+  0xf2, 0x9d, 0xc7, 0x8f, 0x00, 0xac, 0xe5, 0xa8, 0x28, 0x22, 0x9a, 0xc9,
+  0x2f, 0x6e, 0xdb, 0x16, 0xaa, 0xe1, 0xf2, 0x9d, 0xc7, 0x97, 0x00, 0xe6,
+  0x59, 0x88, 0x92, 0xa8, 0x88, 0xc5, 0x2f, 0x6e, 0x1b, 0x00, 0x00, 0x00,
+  0x61, 0x20, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x13, 0x04, 0x62, 0x10,
+  0x0b, 0x04, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x04, 0x94, 0x40, 0x19,
+  0x90, 0x51, 0xc0, 0x02, 0x05, 0x3b, 0x50, 0x96, 0x02, 0x25, 0x2c, 0x50,
+  0xb6, 0x02, 0x85, 0x89, 0x50, 0x92, 0x10, 0xc5, 0x51, 0x7c, 0x33, 0x00,
+  0x45, 0x2b, 0x40, 0xf7, 0x08, 0x00, 0xd5, 0x65, 0x50, 0x04, 0x25, 0x30,
+  0x02, 0x40, 0xe3, 0x1c, 0x82, 0x1c, 0x68, 0x73, 0x08, 0xd5, 0x1c, 0xcc,
+  0x21, 0xd0, 0xc1, 0x34, 0x87, 0x70, 0x61, 0xb4, 0xcc, 0x00, 0x90, 0x32,
+  0x02, 0x30, 0x03, 0x40, 0xf6, 0x50, 0xc7, 0x81, 0x18, 0xc6, 0x64, 0x4c,
+  0xa4, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0x1f, 0x00, 0x00, 0x00, 0x00,
+  0x54, 0x0a, 0x02, 0x20, 0x51, 0x10, 0x00, 0x91, 0x82, 0x00, 0xc8, 0x14,
+  0x04, 0x40, 0xa8, 0x20, 0x00, 0x3a, 0x0c, 0x30, 0x62, 0x50, 0x00, 0x20,
+  0x08, 0x06, 0x15, 0x29, 0x70, 0x94, 0x18, 0x80, 0x14, 0x03, 0xd0, 0x62,
+  0x80, 0xe1, 0x06, 0xa2, 0x0f, 0xce, 0x60, 0x96, 0x21, 0x28, 0x82, 0x59,
+  0x02, 0x61, 0xa0, 0xc2, 0xe0, 0x87, 0x60, 0x1b, 0x06, 0x2a, 0x0c, 0x26,
+  0x58, 0x86, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x30, 0x03, 0x52, 0x30,
+  0x03, 0x66, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xc8, 0xc0, 0x14, 0xcc,
+  0x20, 0xa0, 0x46, 0x0c, 0x14, 0x00, 0x04, 0xc1, 0x00, 0x63, 0x05, 0x33,
+  0x08, 0x08, 0x51, 0x50, 0x83, 0x3e, 0x18, 0x4d, 0x08, 0x00, 0x2b, 0x82,
+  0x10, 0x10, 0x65, 0x80, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x30, 0x03,
+  0x55, 0x60, 0x83, 0x67, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xc8, 0x80,
+  0x15, 0xd8, 0x20, 0xd0, 0x46, 0x0c, 0x14, 0x00, 0x04, 0xc1, 0x00, 0x93,
+  0x05, 0x36, 0x08, 0x14, 0x54, 0x80, 0x83, 0x51, 0x18, 0x4d, 0x08, 0x00,
+  0xca, 0x0c, 0x30, 0x4b, 0x30, 0x58, 0xe3, 0x0a, 0x20, 0xa0, 0xcd, 0x00,
+  0xc3, 0x0d, 0x49, 0x2b, 0x9c, 0xc1, 0x70, 0x43, 0x90, 0x06, 0x61, 0x30,
+  0xdc, 0x10, 0xa8, 0x41, 0x18, 0xcc, 0x32, 0x08, 0x44, 0x30, 0x4b, 0x50,
+  0x0c, 0x54, 0x18, 0x0e, 0x01, 0x16, 0xc0, 0x1e, 0x06, 0x72, 0x88, 0x85,
+  0x80, 0x02, 0x01, 0x90, 0x18, 0x18, 0x60, 0xc4, 0xa0, 0x00, 0x40, 0x10,
+  0x0c, 0xaa, 0x5f, 0xb8, 0x83, 0x0a, 0x5e, 0x41, 0xa8, 0x0c, 0x0c, 0x30,
+  0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x66, 0xb0, 0x0b, 0x7d, 0x10, 0x06,
+  0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x40, 0x06, 0xbd, 0xd0, 0x07, 0xc1,
+  0x1a, 0x8c, 0x18, 0x28, 0x00, 0x08, 0x82, 0x01, 0x36, 0x0e, 0x7d, 0x10,
+  0x10, 0xb9, 0x10, 0x0a, 0xb4, 0x30, 0x9a, 0x10, 0x00, 0x23, 0x06, 0x06,
+  0x00, 0x82, 0x60, 0x60, 0x06, 0xbf, 0x10, 0x0a, 0x66, 0x30, 0x62, 0x70,
+  0x00, 0x20, 0x08, 0x06, 0x64, 0x10, 0x0e, 0xa1, 0x10, 0xc8, 0x01, 0xb1,
+  0x81, 0x01, 0x46, 0x0c, 0x14, 0x00, 0x04, 0xc1, 0x60, 0x3b, 0x07, 0x51,
+  0x10, 0x08, 0x5f, 0x28, 0x85, 0x5c, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04,
+  0x21, 0x30, 0x86, 0x1c, 0x40, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06,
+  0x66, 0x60, 0x0e, 0xa8, 0xc0, 0x06, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60,
+  0x40, 0x06, 0xe8, 0x80, 0x0a, 0x81, 0x1d, 0x8c, 0x18, 0x28, 0x00, 0x08,
+  0x82, 0x01, 0xe6, 0x0e, 0xa8, 0x10, 0x0c, 0xe4, 0xc0, 0x0a, 0xbf, 0x30,
+  0x9a, 0x10, 0x00, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x60, 0x06, 0xea,
+  0xc0, 0x0a, 0x71, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x64, 0xc0,
+  0x0e, 0xac, 0x10, 0xf4, 0x01, 0xdd, 0x81, 0x01, 0x46, 0x0c, 0x14, 0x00,
+  0x04, 0xc1, 0x60, 0x93, 0x87, 0x56, 0x10, 0x88, 0x74, 0x80, 0x05, 0x72,
+  0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0xb0, 0x4b, 0x1d, 0x40, 0x30,
+  0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x66, 0x10, 0x0f, 0xb3, 0x70, 0x07,
+  0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x40, 0x06, 0xf3, 0x30, 0x0b, 0x41,
+  0x28, 0x8c, 0x18, 0x28, 0x00, 0x08, 0x82, 0x01, 0x96, 0x0f, 0xb3, 0x10,
+  0x0c, 0xef, 0x70, 0x0b, 0xea, 0x30, 0x9a, 0x10, 0x00, 0x23, 0x06, 0x06,
+  0x00, 0x82, 0x60, 0x60, 0x06, 0xf5, 0x70, 0x0b, 0x7c, 0x30, 0x62, 0x70,
+  0x00, 0x20, 0x08, 0x06, 0x64, 0x70, 0x0f, 0xb7, 0x10, 0xa0, 0x02, 0x89,
+  0x82, 0x01, 0x46, 0x0c, 0x14, 0x00, 0x04, 0xc1, 0x60, 0xeb, 0x07, 0x5c,
+  0x10, 0x08, 0x7a, 0xd8, 0x85, 0x77, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04,
+  0x21, 0xd8, 0xd1, 0x00, 0x0e, 0xf7, 0x70, 0x0f, 0x14, 0x40, 0x63, 0x0c,
+  0x21, 0xc8, 0x07, 0x43, 0x85, 0x20, 0x3e, 0x3b, 0x1a, 0xc8, 0x61, 0x1f,
+  0xf6, 0x81, 0x02, 0x68, 0x8c, 0x21, 0x04, 0x20, 0x61, 0x44, 0x10, 0x1f,
+  0x03, 0x83, 0x40, 0x3e, 0x06, 0x06, 0x82, 0x7c, 0x76, 0x34, 0xa8, 0x43,
+  0x48, 0x84, 0x04, 0x05, 0xd0, 0x18, 0x43, 0x08, 0x46, 0x62, 0x0c, 0x41,
+  0x20, 0x09, 0xdb, 0x04, 0xf9, 0xd8, 0x26, 0xc8, 0xc7, 0x10, 0x01, 0x3e,
+  0x86, 0x08, 0xf0, 0xd9, 0xd1, 0x20, 0x0f, 0x29, 0x91, 0x12, 0x14, 0x40,
+  0x63, 0x0c, 0x21, 0x70, 0x89, 0x31, 0x04, 0xe1, 0x25, 0x0c, 0x13, 0xe4,
+  0x63, 0x98, 0x20, 0x1f, 0x43, 0x04, 0xf8, 0x18, 0x22, 0xc0, 0x87, 0xc0,
+  0xc1, 0x00, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x60, 0x06, 0x36, 0x81,
+  0x0f, 0xa0, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x64, 0x80, 0x13,
+  0xf8, 0x10, 0xa0, 0xc3, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x98, 0x01,
+  0x4e, 0xe8, 0x43, 0x38, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x01, 0x19,
+  0xe8, 0x84, 0x3e, 0x04, 0xe9, 0x30, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06,
+  0x9d, 0x4f, 0xd0, 0xc3, 0x10, 0x1c, 0x86, 0x39, 0x98, 0x83, 0x4d, 0xd8,
+  0xc4, 0x3c, 0x9c, 0xc3, 0x68, 0x42, 0x00, 0xcc, 0x31, 0xa8, 0x43, 0xf0,
+  0x0e, 0xa3, 0x09, 0x43, 0x30, 0xc7, 0x20, 0x04, 0xf2, 0x30, 0x9a, 0x50,
+  0x08, 0x73, 0x0c, 0x42, 0x50, 0x0f, 0xa3, 0x09, 0xc7, 0x30, 0xc7, 0x20,
+  0x04, 0xf8, 0x40, 0xee, 0x60, 0x80, 0xe1, 0x88, 0x21, 0x1e, 0x82, 0x6f,
+  0xb8, 0x21, 0xe0, 0x87, 0x30, 0x18, 0x6e, 0x08, 0xfa, 0x21, 0x0c, 0x66,
+  0x19, 0x8c, 0x23, 0x18, 0x31, 0x28, 0x00, 0x10, 0x04, 0x83, 0x4f, 0x2d,
+  0x4a, 0x02, 0x47, 0x0c, 0x0a, 0x00, 0x04, 0xc1, 0x20, 0x0c, 0xd2, 0xe2,
+  0x1f, 0x68, 0x1e, 0x0c, 0x40, 0xf4, 0x60, 0x00, 0xaa, 0x07, 0x03, 0x6c,
+  0x67, 0x88, 0x89, 0xb3, 0x28, 0x0b, 0x0a, 0x8c, 0x31, 0xdc, 0x90, 0x16,
+  0x01, 0x19, 0xcc, 0x32, 0x20, 0x5c, 0x30, 0x4b, 0x90, 0x0c, 0x54, 0x18,
+  0xb4, 0x82, 0x00, 0xd8, 0x40, 0x85, 0x61, 0x2b, 0xc8, 0x4d, 0x60, 0xdb,
+  0x21, 0x6c, 0x82, 0x2d, 0xde, 0x22, 0xa0, 0x40, 0x19, 0xc3, 0x11, 0xc1,
+  0x22, 0x7c, 0xc3, 0x0d, 0x81, 0x4a, 0x84, 0xc1, 0x70, 0x43, 0xb0, 0x12,
+  0x61, 0x30, 0xcb, 0xa0, 0x50, 0x01, 0x81, 0x84, 0x01, 0xb6, 0x43, 0xf0,
+  0x84, 0x5c, 0xc8, 0xc5, 0x41, 0xc1, 0x32, 0xc6, 0x10, 0x02, 0xba, 0x18,
+  0x43, 0x10, 0xf0, 0x62, 0x0c, 0x61, 0xa0, 0x8b, 0x31, 0x04, 0x22, 0x2e,
+  0xe8, 0x24, 0x0c, 0xb0, 0x1d, 0x62, 0x2c, 0xf2, 0x22, 0x2f, 0x1c, 0x4a,
+  0x09, 0x03, 0x0c, 0x1b, 0x10, 0x42, 0x37, 0x00, 0xdb, 0x21, 0xca, 0x62,
+  0x2f, 0xfc, 0x02, 0xa2, 0x40, 0x19, 0xc4, 0x12, 0x06, 0xd8, 0x0e, 0x81,
+  0x16, 0x7e, 0x11, 0x1a, 0x13, 0xb9, 0x84, 0x01, 0x86, 0x0d, 0x08, 0xa1,
+  0x1b, 0x80, 0xe1, 0x88, 0x31, 0x70, 0x89, 0xe0, 0x1b, 0x6e, 0x08, 0x78,
+  0x22, 0x0c, 0x86, 0x1b, 0x82, 0x9e, 0x08, 0x83, 0x59, 0x86, 0x85, 0x09,
+  0x0c, 0x33, 0x0d, 0x10, 0x6c, 0x67, 0x70, 0x0b, 0xd2, 0x10, 0x0d, 0xa2,
+  0x09, 0x03, 0x0c, 0x1b, 0x10, 0xc2, 0x30, 0x00, 0xb3, 0x04, 0x93, 0x6d,
+  0xa9, 0x01, 0x02, 0xb2, 0x09, 0x03, 0xcc, 0x12, 0x34, 0x03, 0x15, 0x0a,
+  0x1a, 0x30, 0x6f, 0x10, 0x0d, 0x54, 0x28, 0x68, 0xc0, 0xbc, 0x41, 0x34,
+  0x50, 0xa1, 0xa0, 0x01, 0xf3, 0x06, 0xd1, 0x40, 0x85, 0x82, 0x06, 0xcc,
+  0x1b, 0x44, 0x03, 0x15, 0x0a, 0x18, 0x30, 0x73, 0x10, 0x0d, 0x54, 0x18,
+  0x0e, 0x13, 0x0a, 0xd1, 0x1c, 0x03, 0x58, 0x18, 0xae, 0x31, 0xc7, 0x10,
+  0x18, 0xb2, 0x31, 0xc7, 0x10, 0x18, 0xae, 0x31, 0xc7, 0x10, 0x18, 0xab,
+  0xb1, 0x9d, 0x81, 0x2f, 0x64, 0x03, 0x36, 0x28, 0x30, 0x46, 0x05, 0xb7,
+  0x01, 0xc3, 0x0d, 0x48, 0x40, 0x06, 0xc3, 0x0d, 0x41, 0x5c, 0x84, 0xc1,
+  0x70, 0x43, 0x20, 0x17, 0x61, 0x30, 0xcb, 0xe0, 0x3c, 0xc1, 0x70, 0xc3,
+  0x02, 0x1b, 0x68, 0x30, 0xdc, 0x10, 0xd0, 0x45, 0x18, 0x0c, 0x37, 0x04,
+  0x75, 0x11, 0x06, 0xb3, 0x04, 0xcf, 0x40, 0xc5, 0x1d, 0xb0, 0x4b, 0x23,
+  0x38, 0xc3, 0x0d, 0xc1, 0x5d, 0x84, 0xc1, 0x2c, 0x03, 0x24, 0x05, 0xdb,
+  0x21, 0x4e, 0xa3, 0x37, 0x7a, 0x03, 0xa2, 0x60, 0x19, 0x63, 0x08, 0xc1,
+  0x6f, 0x8c, 0x21, 0x08, 0xe3, 0x31, 0x86, 0x30, 0xfc, 0xc6, 0x18, 0x02,
+  0xc1, 0x1b, 0x24, 0x17, 0x06, 0xd8, 0x0e, 0xe1, 0x1a, 0xe4, 0x71, 0x1e,
+  0x17, 0x05, 0xca, 0xa0, 0xba, 0x30, 0xc0, 0x76, 0x88, 0xd8, 0x38, 0x8f,
+  0xf3, 0xd0, 0xe8, 0x2e, 0x0c, 0x30, 0x6c, 0x40, 0x08, 0xd8, 0x00, 0x6c,
+  0x87, 0x98, 0x8d, 0xf4, 0x60, 0x0f, 0x8e, 0xf2, 0xc2, 0x00, 0xc3, 0x06,
+  0x84, 0xf0, 0x0d, 0x00, 0xe9, 0x85, 0x01, 0x68, 0x2f, 0x0c, 0x30, 0x4b,
+  0x10, 0x19, 0x18, 0xc0, 0x07, 0x08, 0xa8, 0x2f, 0x0c, 0x30, 0x4b, 0xd0,
+  0xcc, 0x12, 0x4c, 0xb3, 0x04, 0xda, 0x76, 0x88, 0xdc, 0x78, 0x8f, 0xf7,
+  0x20, 0x05, 0x0a, 0x96, 0x31, 0x86, 0x10, 0xac, 0xc7, 0x70, 0x44, 0x00,
+  0x1a, 0xc1, 0x37, 0xdc, 0x10, 0xb8, 0x46, 0x18, 0x0c, 0x37, 0x04, 0xaf,
+  0x11, 0x06, 0xb3, 0x0c, 0x95, 0x15, 0x10, 0x69, 0x18, 0x60, 0x96, 0x20,
+  0x9b, 0x25, 0xb8, 0x66, 0x09, 0x30, 0x5b, 0x85, 0xfc, 0x00, 0x01, 0x99,
+  0x86, 0x01, 0x28, 0x16, 0x8c, 0x31, 0xdc, 0x30, 0x04, 0x64, 0x30, 0xdc,
+  0x10, 0xd4, 0x46, 0x18, 0x0c, 0x37, 0x04, 0xb6, 0x11, 0x06, 0xb3, 0x0c,
+  0xc9, 0x16, 0xcc, 0x12, 0x70, 0xb3, 0x04, 0xdc, 0x2c, 0x01, 0x37, 0x50,
+  0x62, 0xf8, 0x8f, 0x46, 0x16, 0x9b, 0xff, 0x64, 0xf8, 0x73, 0x0c, 0x37,
+  0x04, 0xfd, 0x11, 0x06, 0xb3, 0x0c, 0x5f, 0x17, 0x6c, 0x67, 0x40, 0x0f,
+  0xff, 0xe0, 0x0f, 0x0a, 0x8c, 0x31, 0xdc, 0x10, 0xe0, 0x07, 0x19, 0x0c,
+  0x37, 0x04, 0xbc, 0x11, 0x06, 0xc3, 0x0d, 0x41, 0x6f, 0x84, 0xc1, 0x2c,
+  0x83, 0xf7, 0x05, 0xdb, 0x19, 0xda, 0x63, 0x44, 0x42, 0x84, 0x02, 0x63,
+  0x6c, 0x87, 0x78, 0x8f, 0x12, 0x29, 0x91, 0x80, 0x6a, 0xc3, 0x00, 0xc3,
+  0x06, 0x84, 0x90, 0x0e, 0x03, 0xb0, 0x9d, 0x21, 0x3e, 0x4e, 0xa4, 0x44,
+  0x28, 0x30, 0xc6, 0x76, 0x88, 0xf9, 0x48, 0x11, 0x16, 0x09, 0x28, 0x37,
+  0x0c, 0x30, 0x6c, 0x40, 0x08, 0xe8, 0x30, 0x00, 0xdb, 0x19, 0xea, 0x63,
+  0x45, 0x52, 0x84, 0x02, 0x63, 0x54, 0x00, 0x23, 0x40, 0xbd, 0x61, 0x80,
+  0x61, 0x03, 0x82, 0x10, 0x06, 0x60, 0x96, 0xe0, 0x1b, 0x8e, 0x90, 0x87,
+  0xde, 0x20, 0xbe, 0xe1, 0x86, 0x60, 0x3d, 0xc2, 0x60, 0xb8, 0x21, 0x60,
+  0x8f, 0x30, 0x98, 0x65, 0x00, 0x83, 0x30, 0x08, 0x46, 0x0c, 0x0a, 0x00,
+  0x04, 0xc1, 0xe0, 0xcb, 0x11, 0xfa, 0x40, 0x0a, 0x0f, 0x03, 0x60, 0x38,
+  0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa6, 0x62, 0x00, 0xd3,
+  0x14, 0x21, 0x81, 0xa5, 0x1c, 0x0f, 0x80, 0x2d, 0x0e, 0x30, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};

+ 437 - 0
DX12DefaultHitShader.h

@@ -0,0 +1,437 @@
+#if 0
+; shader debug name: x64\Debug\DX12DefaultHitShader.pdb
+; shader hash: 1ab7899f447067e7ad99da0015a1bd0f
+;
+; Buffer Definitions:
+;
+;
+; Resource Bindings:
+;
+; Name                                 Type  Format         Dim      ID      HLSL Bind  Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%struct.HitInfo = type { [5 x <4 x float>], [5 x float], i32 }
+%struct.Attributes = type { <2 x float> }
+
+@dx.nothing.a = internal constant [1 x i32] zeroinitializer
+
+; Function Attrs: nounwind
+define void @"\01?ClosestHit@@YAXUHitInfo@@UAttributes@@@Z"(%struct.HitInfo* noalias %payload, %struct.Attributes* %attrib) #0 {
+  %1 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0
+  %2 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %1, i32 0, i32 0
+  %3 = load <4 x float>, <4 x float>* %2
+  %4 = extractelement <4 x float> %3, i64 0
+  %5 = extractelement <4 x float> %3, i64 1
+  %6 = extractelement <4 x float> %3, i64 2
+  %7 = extractelement <4 x float> %3, i64 3
+  %8 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %1, i32 0, i32 1
+  %9 = load <4 x float>, <4 x float>* %8
+  %10 = extractelement <4 x float> %9, i64 0
+  %11 = extractelement <4 x float> %9, i64 1
+  %12 = extractelement <4 x float> %9, i64 2
+  %13 = extractelement <4 x float> %9, i64 3
+  %14 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %1, i32 0, i32 2
+  %15 = load <4 x float>, <4 x float>* %14
+  %16 = extractelement <4 x float> %15, i64 0
+  %17 = extractelement <4 x float> %15, i64 1
+  %18 = extractelement <4 x float> %15, i64 2
+  %19 = extractelement <4 x float> %15, i64 3
+  %20 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %1, i32 0, i32 3
+  %21 = load <4 x float>, <4 x float>* %20
+  %22 = extractelement <4 x float> %21, i64 0
+  %23 = extractelement <4 x float> %21, i64 1
+  %24 = extractelement <4 x float> %21, i64 2
+  %25 = extractelement <4 x float> %21, i64 3
+  %26 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %1, i32 0, i32 4
+  %27 = load <4 x float>, <4 x float>* %26
+  %28 = extractelement <4 x float> %27, i64 0
+  %29 = extractelement <4 x float> %27, i64 1
+  %30 = extractelement <4 x float> %27, i64 2
+  %31 = extractelement <4 x float> %27, i64 3
+  %32 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1
+  %33 = getelementptr inbounds [5 x float], [5 x float]* %32, i32 0, i32 0
+  %34 = load float, float* %33
+  %35 = getelementptr inbounds [5 x float], [5 x float]* %32, i32 0, i32 1
+  %36 = load float, float* %35
+  %37 = getelementptr inbounds [5 x float], [5 x float]* %32, i32 0, i32 2
+  %38 = load float, float* %37
+  %39 = getelementptr inbounds [5 x float], [5 x float]* %32, i32 0, i32 3
+  %40 = load float, float* %39
+  %41 = getelementptr inbounds [5 x float], [5 x float]* %32, i32 0, i32 4
+  %42 = load float, float* %41
+  %43 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %44 = load i32, i32* %43
+  %45 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %46 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0
+  %47 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %46, i32 0, i32 0
+  %48 = insertelement <4 x float> undef, float %4, i64 0
+  %49 = insertelement <4 x float> %48, float %5, i64 1
+  %50 = insertelement <4 x float> %49, float %6, i64 2
+  %51 = insertelement <4 x float> %50, float %7, i64 3
+  store <4 x float> %51, <4 x float>* %47
+  %52 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %46, i32 0, i32 1
+  %53 = insertelement <4 x float> undef, float %10, i64 0
+  %54 = insertelement <4 x float> %53, float %11, i64 1
+  %55 = insertelement <4 x float> %54, float %12, i64 2
+  %56 = insertelement <4 x float> %55, float %13, i64 3
+  store <4 x float> %56, <4 x float>* %52
+  %57 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %46, i32 0, i32 2
+  %58 = insertelement <4 x float> undef, float %16, i64 0
+  %59 = insertelement <4 x float> %58, float %17, i64 1
+  %60 = insertelement <4 x float> %59, float %18, i64 2
+  %61 = insertelement <4 x float> %60, float %19, i64 3
+  store <4 x float> %61, <4 x float>* %57
+  %62 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %46, i32 0, i32 3
+  %63 = insertelement <4 x float> undef, float %22, i64 0
+  %64 = insertelement <4 x float> %63, float %23, i64 1
+  %65 = insertelement <4 x float> %64, float %24, i64 2
+  %66 = insertelement <4 x float> %65, float %25, i64 3
+  store <4 x float> %66, <4 x float>* %62
+  %67 = getelementptr inbounds [5 x <4 x float>], [5 x <4 x float>]* %46, i32 0, i32 4
+  %68 = insertelement <4 x float> undef, float %28, i64 0
+  %69 = insertelement <4 x float> %68, float %29, i64 1
+  %70 = insertelement <4 x float> %69, float %30, i64 2
+  %71 = insertelement <4 x float> %70, float %31, i64 3
+  store <4 x float> %71, <4 x float>* %67
+  %72 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 1
+  %73 = getelementptr inbounds [5 x float], [5 x float]* %72, i32 0, i32 0
+  store float %34, float* %73
+  %74 = getelementptr inbounds [5 x float], [5 x float]* %72, i32 0, i32 1
+  store float %36, float* %74
+  %75 = getelementptr inbounds [5 x float], [5 x float]* %72, i32 0, i32 2
+  store float %38, float* %75
+  %76 = getelementptr inbounds [5 x float], [5 x float]* %72, i32 0, i32 3
+  store float %40, float* %76
+  %77 = getelementptr inbounds [5 x float], [5 x float]* %72, i32 0, i32 4
+  store float %42, float* %77
+  %78 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  store i32 %44, i32* %78
+  ret void
+}
+
+attributes #0 = { nounwind }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!1}
+!dx.shaderModel = !{!2}
+!dx.typeAnnotations = !{!3}
+!dx.dxrPayloadAnnotations = !{!9}
+!dx.entryPoints = !{!13, !15}
+
+!0 = !{!"dxcoob 1.8.2502.11 (239921522)"}
+!1 = !{i32 1, i32 8}
+!2 = !{!"lib", i32 6, i32 8}
+!3 = !{i32 1, void (%struct.HitInfo*, %struct.Attributes*)* @"\01?ClosestHit@@YAXUHitInfo@@UAttributes@@@Z", !4}
+!4 = !{!5, !7, !8}
+!5 = !{i32 1, !6, !6}
+!6 = !{}
+!7 = !{i32 2, !6, !6}
+!8 = !{i32 0, !6, !6}
+!9 = !{i32 0, %struct.HitInfo undef, !10}
+!10 = !{!11, !12, !11}
+!11 = !{i32 0, i32 13107}
+!12 = !{i32 0, i32 12339}
+!13 = !{null, !"", null, null, !14}
+!14 = !{i32 0, i64 1}
+!15 = !{void (%struct.HitInfo*, %struct.Attributes*)* @"\01?ClosestHit@@YAXUHitInfo@@UAttributes@@@Z", !"\01?ClosestHit@@YAXUHitInfo@@UAttributes@@@Z", null, null, !16}
+!16 = !{i32 8, i32 10, i32 6, i32 104, i32 7, i32 8, i32 5, !17}
+!17 = !{i32 0}
+
+#endif
+
+const unsigned char DX12DefaultHitShaderBytes[] = {
+  0x44, 0x58, 0x42, 0x43, 0xea, 0x3f, 0xb9, 0xe3, 0x97, 0x26, 0xd6, 0x1c,
+  0xb8, 0x42, 0x08, 0x3d, 0x51, 0x75, 0x52, 0x9e, 0x01, 0x00, 0x00, 0x00,
+  0x94, 0x0d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
+  0x84, 0x06, 0x00, 0x00, 0xb4, 0x06, 0x00, 0x00, 0xd0, 0x06, 0x00, 0x00,
+  0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x28, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x12, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x32, 0x33, 0x39, 0x39, 0x32, 0x31, 0x35, 0x32,
+  0x00, 0x31, 0x2e, 0x38, 0x2e, 0x32, 0x35, 0x30, 0x32, 0x2e, 0x31, 0x31,
+  0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0x00, 0x01, 0x3f, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x48, 0x69,
+  0x74, 0x40, 0x40, 0x59, 0x41, 0x58, 0x55, 0x48, 0x69, 0x74, 0x49, 0x6e,
+  0x66, 0x6f, 0x40, 0x40, 0x55, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+  0x74, 0x65, 0x73, 0x40, 0x40, 0x40, 0x5a, 0x00, 0x43, 0x6c, 0x6f, 0x73,
+  0x65, 0x73, 0x74, 0x48, 0x69, 0x74, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+  0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x04, 0x00, 0x00, 0x63, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xff, 0xff, 0xff, 0xff, 0x53, 0x54, 0x41, 0x54, 0x64, 0x05, 0x00, 0x00,
+  0x68, 0x00, 0x06, 0x00, 0x59, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c,
+  0x08, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4c, 0x05, 0x00, 0x00,
+  0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
+  0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
+  0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
+  0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
+  0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20,
+  0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90,
+  0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a,
+  0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x1b, 0x88, 0x20, 0x00, 0x92, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff,
+  0x03, 0x20, 0x01, 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84,
+  0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c,
+  0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x44, 0x73, 0x04, 0x60, 0x90, 0x01, 0x80,
+  0xc2, 0x08, 0xc0, 0x0c, 0xc0, 0x30, 0x02, 0x41, 0x64, 0x41, 0xc9, 0x02,
+  0x72, 0x8e, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x21, 0x32, 0x89, 0x4d, 0xe1,
+  0xa0, 0xc1, 0x1c, 0x40, 0x68, 0x18, 0x41, 0x20, 0x2e, 0x92, 0xa6, 0x88,
+  0x12, 0x26, 0x5f, 0x9b, 0xa6, 0x08, 0x09, 0xa8, 0x89, 0x90, 0x50, 0xa0,
+  0x68, 0x95, 0x61, 0x24, 0x46, 0x6d, 0x20, 0x60, 0x8e, 0x00, 0x14, 0x00,
+  0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79,
+  0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e,
+  0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07,
+  0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
+  0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07,
+  0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+  0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x24, 0x90, 0x21, 0x23,
+  0x25, 0x40, 0x00, 0x1e, 0xb2, 0x31, 0xe4, 0x69, 0x80, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
+  0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x25, 0x50, 0x10, 0x23,
+  0x00, 0xc5, 0x50, 0xb0, 0x02, 0x65, 0x50, 0x0e, 0x25, 0x51, 0x1a, 0x85,
+  0x50, 0xa0, 0x01, 0x85, 0x2a, 0x50, 0x0a, 0x45, 0x50, 0xe6, 0xcc, 0x01,
+  0x65, 0x0e, 0x1c, 0x50, 0x14, 0x05, 0x1d, 0x50, 0xb4, 0x01, 0x04, 0x4b,
+  0x80, 0xd0, 0x0c, 0x00, 0xad, 0x19, 0x00, 0x0a, 0x23, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90,
+  0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24,
+  0xc6, 0x05, 0xc7, 0x45, 0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04,
+  0x45, 0x66, 0x26, 0x27, 0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43,
+  0x10, 0x4c, 0x10, 0x00, 0x61, 0x82, 0x00, 0x0c, 0x1b, 0x84, 0x81, 0x98,
+  0x20, 0x00, 0xc4, 0x06, 0xc1, 0x30, 0x38, 0xb0, 0xa5, 0x89, 0x4d, 0x10,
+  0x80, 0x62, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x01, 0xb1, 0x26, 0x08, 0x80,
+  0xc1, 0x62, 0xec, 0x8d, 0xed, 0x4d, 0x6e, 0x82, 0x00, 0x1c, 0x13, 0x04,
+  0x00, 0x99, 0x20, 0x00, 0xc9, 0x04, 0x01, 0x50, 0x26, 0x08, 0xc0, 0xb2,
+  0x01, 0x49, 0x1a, 0xc7, 0x78, 0xa0, 0x48, 0x22, 0x42, 0x96, 0x36, 0x47,
+  0x17, 0xe6, 0x36, 0x56, 0x36, 0x41, 0x00, 0x98, 0x0d, 0x46, 0x42, 0x39,
+  0xd5, 0x03, 0x11, 0x41, 0x4b, 0xa3, 0x1b, 0x7a, 0xab, 0x73, 0xa3, 0x9b,
+  0x20, 0x00, 0xcd, 0x04, 0x01, 0x70, 0x36, 0x18, 0xc9, 0xe5, 0x60, 0x4f,
+  0xb6, 0x81, 0x60, 0x26, 0x4b, 0x9b, 0x20, 0x2c, 0x17, 0x09, 0xb1, 0x30,
+  0xb9, 0xbc, 0x09, 0x02, 0xf0, 0x6c, 0x40, 0x92, 0xce, 0x31, 0x1e, 0x28,
+  0xf2, 0x36, 0x08, 0xc4, 0xb7, 0xa1, 0x30, 0x96, 0x8d, 0x03, 0x83, 0x09,
+  0x82, 0x13, 0x6c, 0x00, 0x36, 0x0c, 0xc3, 0x18, 0x8c, 0xc1, 0x86, 0xc1,
+  0x1b, 0x83, 0x31, 0xd8, 0x30, 0x18, 0x63, 0x30, 0x06, 0x1b, 0x06, 0x32,
+  0x28, 0x03, 0x33, 0xd8, 0x30, 0x0c, 0x62, 0x70, 0x06, 0x13, 0x04, 0x00,
+  0xda, 0x20, 0x18, 0x69, 0x30, 0x41, 0x00, 0xa2, 0x0d, 0x82, 0xb1, 0x06,
+  0x1b, 0x06, 0x35, 0x60, 0x03, 0x35, 0xd8, 0x30, 0x18, 0x4b, 0x1b, 0x10,
+  0x98, 0x20, 0x40, 0xd5, 0x06, 0xc1, 0x80, 0x83, 0x0d, 0x05, 0xf0, 0x06,
+  0x00, 0x10, 0x07, 0x54, 0x83, 0x80, 0x9f, 0x21, 0xb6, 0xb7, 0xb9, 0xb2,
+  0x39, 0x3a, 0xa4, 0x34, 0x3a, 0x20, 0xa0, 0xac, 0x20, 0xac, 0x2a, 0xa4,
+  0x34, 0xba, 0x24, 0x37, 0xb3, 0x37, 0x20, 0xa0, 0xaa, 0x20, 0x3a, 0x3a,
+  0xb9, 0x34, 0xb1, 0x3a, 0xba, 0xb2, 0x39, 0x20, 0x20, 0x20, 0xad, 0x09,
+  0x02, 0x20, 0x4d, 0x10, 0x80, 0x69, 0x43, 0x60, 0x6c, 0x40, 0x08, 0x3a,
+  0x48, 0xea, 0xe0, 0x21, 0x32, 0x3b, 0xd8, 0x50, 0x88, 0xc1, 0x1c, 0x00,
+  0xc0, 0x1d, 0xb0, 0x48, 0x73, 0x9b, 0xa3, 0x9b, 0x9b, 0x20, 0x00, 0xd4,
+  0x06, 0x21, 0x0f, 0xf4, 0xa0, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, 0x4b, 0x1a,
+  0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, 0x86, 0xe7, 0x62, 0x57,
+  0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, 0x90, 0xe1, 0xb9,
+  0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8c, 0x3a, 0x64, 0x78,
+  0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c,
+  0x53, 0x82, 0xa4, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90,
+  0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x14, 0x01,
+  0x0c, 0xce, 0xa0, 0x18, 0x19, 0x9e, 0x0b, 0x19, 0x9e, 0x1c, 0x54, 0x58,
+  0x1e, 0xdb, 0x5b, 0x18, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d,
+  0xda, 0x9b, 0xdb, 0xdc, 0x94, 0xa0, 0x0d, 0xea, 0x90, 0xe1, 0xb9, 0x94,
+  0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x11,
+  0xe2, 0xe0, 0x0e, 0xba, 0x90, 0xe1, 0xb9, 0x8c, 0xbd, 0xd5, 0xb9, 0xd1,
+  0x95, 0xc9, 0xcd, 0x4d, 0x09, 0xf4, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
+  0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
+  0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
+  0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
+  0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
+  0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
+  0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
+  0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
+  0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
+  0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
+  0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
+  0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
+  0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
+  0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
+  0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
+  0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
+  0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
+  0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
+  0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
+  0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
+  0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
+  0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
+  0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87,
+  0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87,
+  0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40,
+  0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x15, 0xa0, 0x06, 0x81, 0xdf, 0x90, 0xfd, 0x9e,
+  0x97, 0xe7, 0x74, 0x64, 0x9a, 0x0e, 0x04, 0x66, 0x83, 0xd8, 0x2a, 0x32,
+  0x4d, 0x4f, 0xba, 0xcd, 0x6f, 0x20, 0xb0, 0x1a, 0xa4, 0xd3, 0xe5, 0x69,
+  0x71, 0x9d, 0x5e, 0x9e, 0x03, 0x81, 0x40, 0xad, 0x01, 0x30, 0xc3, 0xe5,
+  0x37, 0xce, 0x74, 0x20, 0x8d, 0xe1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x49, 0x4c, 0x44, 0x4e, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00,
+  0x78, 0x36, 0x34, 0x5c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x5c, 0x44, 0x58,
+  0x31, 0x32, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48, 0x69, 0x74,
+  0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x64, 0x62, 0x00, 0x00,
+  0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x1a, 0xb7, 0x89, 0x9f, 0x44, 0x70, 0x67, 0xe7, 0xad, 0x99, 0xda, 0x00,
+  0x15, 0xa1, 0xbd, 0x0f, 0x44, 0x58, 0x49, 0x4c, 0xbc, 0x06, 0x00, 0x00,
+  0x68, 0x00, 0x06, 0x00, 0xaf, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c,
+  0x08, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xa4, 0x06, 0x00, 0x00,
+  0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xa6, 0x01, 0x00, 0x00,
+  0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
+  0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
+  0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
+  0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20,
+  0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90,
+  0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a,
+  0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x1b, 0x88, 0x20, 0x00, 0x92, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff,
+  0x03, 0x20, 0x01, 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84,
+  0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c,
+  0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x58, 0x73, 0x04, 0x60, 0x90, 0x01, 0x80,
+  0xc2, 0x08, 0xc0, 0x0c, 0xc0, 0x30, 0x02, 0x41, 0x64, 0x41, 0xc9, 0x02,
+  0x72, 0x8e, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x21, 0x32, 0x89, 0x4d, 0xe1,
+  0xa0, 0xc1, 0x1c, 0x40, 0x68, 0x18, 0x41, 0x20, 0x2e, 0x92, 0xa6, 0x88,
+  0x12, 0x26, 0x5f, 0x9b, 0xa6, 0x08, 0x09, 0xa8, 0x89, 0x90, 0x50, 0xa0,
+  0x68, 0x95, 0x61, 0x24, 0x46, 0x6d, 0x20, 0x60, 0x8e, 0x00, 0x14, 0xc8,
+  0x50, 0xa1, 0x43, 0x84, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0,
+  0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0,
+  0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d,
+  0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
+  0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78,
+  0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a,
+  0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73,
+  0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+  0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
+  0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6,
+  0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78,
+  0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76,
+  0x40, 0x07, 0x3a, 0x0f, 0x24, 0x90, 0x21, 0x23, 0x25, 0x40, 0x00, 0x1e,
+  0xa0, 0x31, 0xe4, 0x69, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+  0xc6, 0x04, 0x43, 0x02, 0x25, 0x50, 0x10, 0xc5, 0x50, 0x04, 0x23, 0x00,
+  0x65, 0xce, 0x1c, 0x50, 0xe6, 0xc0, 0x01, 0x45, 0x51, 0xd0, 0x01, 0xe5,
+  0x50, 0x0a, 0x04, 0x4b, 0x80, 0xd0, 0x0c, 0x00, 0x85, 0x11, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90,
+  0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24,
+  0xc6, 0x05, 0xc7, 0x45, 0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04,
+  0x45, 0x66, 0x26, 0x27, 0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43,
+  0x10, 0x4c, 0x10, 0x00, 0x61, 0x82, 0x00, 0x0c, 0x1b, 0x84, 0x81, 0xe0,
+  0xc0, 0x96, 0x26, 0x36, 0x41, 0x00, 0x88, 0x0d, 0x83, 0x71, 0x10, 0x13,
+  0x04, 0x27, 0xd8, 0x00, 0x6c, 0x18, 0x06, 0x45, 0x99, 0x20, 0x00, 0xc5,
+  0x86, 0x81, 0x51, 0x94, 0x09, 0x02, 0x60, 0x6c, 0x18, 0x1c, 0x45, 0xd9,
+  0x30, 0x2c, 0xcd, 0xb3, 0x61, 0x18, 0x12, 0x68, 0x82, 0x80, 0x38, 0x13,
+  0x04, 0xe0, 0xd8, 0x20, 0x38, 0xd3, 0x04, 0x01, 0x40, 0x36, 0x08, 0x4e,
+  0xb5, 0x61, 0xa0, 0x2c, 0x6a, 0xc3, 0xe0, 0x48, 0x17, 0x81, 0x09, 0x02,
+  0xd4, 0x6c, 0x10, 0x1c, 0x6d, 0x43, 0x01, 0x64, 0x00, 0xb0, 0x51, 0x0d,
+  0x02, 0x7e, 0x86, 0xd8, 0xde, 0xe6, 0xca, 0xe6, 0xe8, 0x90, 0xd2, 0xe8,
+  0x80, 0x80, 0xb2, 0x82, 0xb0, 0xaa, 0x90, 0xd2, 0xe8, 0x92, 0xdc, 0xcc,
+  0xde, 0x80, 0x80, 0xaa, 0x82, 0xe8, 0xe8, 0xe4, 0xd2, 0xc4, 0xea, 0xe8,
+  0xca, 0xe6, 0x80, 0x80, 0x80, 0xb4, 0x26, 0x08, 0x40, 0x32, 0x41, 0x00,
+  0x94, 0x09, 0x02, 0xb0, 0x4c, 0x10, 0x00, 0x66, 0x43, 0xe0, 0x6c, 0x40,
+  0x08, 0xef, 0xf8, 0xc0, 0x80, 0x08, 0x03, 0x31, 0xd8, 0x50, 0x24, 0x1d,
+  0x00, 0x8c, 0x41, 0x15, 0x36, 0x36, 0xbb, 0x36, 0x97, 0x34, 0xb2, 0x32,
+  0x37, 0xba, 0x29, 0x41, 0x50, 0x85, 0x0c, 0xcf, 0xc5, 0xae, 0x4c, 0x6e,
+  0x2e, 0xed, 0xcd, 0x6d, 0x4a, 0x40, 0x34, 0x21, 0xc3, 0x73, 0xb1, 0x0b,
+  0x63, 0xb3, 0x2b, 0x93, 0x9b, 0x12, 0x10, 0x75, 0xc8, 0xf0, 0x5c, 0xe6,
+  0xd0, 0xc2, 0xc8, 0xca, 0xe4, 0x9a, 0xde, 0xc8, 0xca, 0xd8, 0xa6, 0x04,
+  0x47, 0x25, 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8, 0xb2, 0x20, 0x37, 0xb7,
+  0x37, 0xba, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29, 0x01, 0x54, 0x8c,
+  0x0c, 0xcf, 0x85, 0x0c, 0x4f, 0x0e, 0x2a, 0x2c, 0x8f, 0xed, 0x2d, 0x8c,
+  0x2c, 0xc8, 0xcd, 0xed, 0x8d, 0x2e, 0x8c, 0x2e, 0xed, 0xcd, 0x6d, 0x6e,
+  0x4a, 0x70, 0xd5, 0x21, 0xc3, 0x73, 0x29, 0x73, 0xa3, 0x93, 0xcb, 0x83,
+  0x7a, 0x4b, 0x73, 0xa3, 0x9b, 0x9b, 0x22, 0x6c, 0x63, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+  0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+  0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+  0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+  0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+  0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+  0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+  0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+  0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+  0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+  0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+  0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+  0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+  0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+  0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+  0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+  0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+  0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+  0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+  0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+  0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+  0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+  0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70,
+  0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60,
+  0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4,
+  0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00,
+  0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x15, 0xa0, 0x06, 0x81,
+  0xdf, 0x90, 0xfd, 0x9e, 0x97, 0xe7, 0x74, 0x64, 0x9a, 0x0e, 0x04, 0x66,
+  0x83, 0xd8, 0x2a, 0x32, 0x4d, 0x4f, 0xba, 0xcd, 0x6f, 0x20, 0xb0, 0x1a,
+  0xa4, 0xd3, 0xe5, 0x69, 0x71, 0x9d, 0x5e, 0x9e, 0x03, 0x81, 0x40, 0xad,
+  0x01, 0x30, 0xc3, 0xe5, 0x37, 0xce, 0x74, 0x20, 0x8d, 0xe1, 0x03, 0x00,
+  0x61, 0x20, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+  0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0xca, 0xa0, 0x10,
+  0x08, 0x96, 0xc1, 0x08, 0x40, 0x11, 0x50, 0x99, 0x01, 0xa0, 0x3a, 0xd4,
+  0x11, 0x08, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x1b, 0x0d, 0xc9, 0x34,
+  0x6d, 0x33, 0x04, 0x14, 0x45, 0x41, 0x01, 0x63, 0x08, 0xc1, 0x31, 0x86,
+  0x20, 0x40, 0x63, 0x08, 0x03, 0x32, 0x86, 0x40, 0x2c, 0xdb, 0x0c, 0x87,
+  0xe6, 0x51, 0x50, 0xc0, 0x18, 0x42, 0xd0, 0x8c, 0x21, 0x08, 0xd6, 0x18,
+  0xc2, 0xe0, 0x8c, 0x21, 0x10, 0xd1, 0x36, 0x43, 0x03, 0x06, 0x61, 0x40,
+  0x41, 0x01, 0x63, 0x08, 0xc1, 0x34, 0x86, 0x20, 0x70, 0x63, 0x08, 0x03,
+  0x35, 0x86, 0x40, 0x5c, 0xdb, 0x0c, 0x93, 0x19, 0x68, 0x14, 0x14, 0x30,
+  0x86, 0x10, 0x64, 0x63, 0x08, 0x82, 0x18, 0x8c, 0x21, 0x0c, 0xda, 0x18,
+  0x02, 0xd1, 0x6d, 0x33, 0x64, 0x6c, 0xf0, 0x51, 0x50, 0xc0, 0x18, 0x42,
+  0xf0, 0x8d, 0x21, 0x08, 0x68, 0x30, 0x86, 0x30, 0x80, 0xc1, 0x18, 0x02,
+  0x31, 0x06, 0x1b, 0x0d, 0x68, 0x20, 0x07, 0x76, 0xb0, 0xcf, 0x10, 0xcc,
+  0xc1, 0x1c, 0x50, 0x40, 0xc0, 0x3e, 0xc3, 0x50, 0x07, 0x79, 0x40, 0x01,
+  0x01, 0xfb, 0x0c, 0xc5, 0x1d, 0xe0, 0x01, 0x05, 0x04, 0xec, 0x33, 0x1c,
+  0x79, 0xd0, 0x06, 0x14, 0x10, 0xb0, 0xcf, 0x90, 0xec, 0x81, 0x1b, 0x50,
+  0x40, 0xc0, 0x46, 0xc3, 0x1c, 0xf4, 0x81, 0x1f, 0x50, 0x00, 0x00, 0xb5,
+  0x01, 0x00, 0x1b, 0x0d, 0x76, 0x00, 0x0a, 0xa0, 0xb0, 0xcd, 0x10, 0x84,
+  0x42, 0x28, 0xcc, 0x31, 0xc4, 0x01, 0x1b, 0xcc, 0xc1, 0x1c, 0x43, 0xc0,
+  0x06, 0x7c, 0x30, 0xc7, 0x10, 0xb0, 0x01, 0x1d, 0xcc, 0x31, 0x04, 0x6c,
+  0x70, 0x07, 0xc3, 0x06, 0x44, 0x11, 0x00, 0xc0, 0x36, 0x83, 0x61, 0x0a,
+  0xaa, 0x30, 0xc7, 0x60, 0x07, 0x6b, 0x80, 0x07, 0x73, 0x0c, 0xc1, 0x1a,
+  0x84, 0xc2, 0x1c, 0x43, 0xb0, 0x06, 0x79, 0x30, 0xc7, 0x10, 0xac, 0x01,
+  0x1f, 0x0c, 0x1b, 0x10, 0x45, 0x00, 0x00, 0xdb, 0x0c, 0xcb, 0x2a, 0xb0,
+  0xc2, 0x1c, 0xc3, 0x1e, 0xa8, 0x41, 0x1f, 0xcc, 0x31, 0x04, 0x6a, 0x60,
+  0x0a, 0x73, 0x0c, 0x81, 0x1a, 0xf8, 0xc1, 0x1c, 0x43, 0xa0, 0x06, 0xa1,
+  0x30, 0x6c, 0x40, 0x14, 0x01, 0x00, 0x6c, 0x33, 0x40, 0xb0, 0x40, 0x0a,
+  0x73, 0x0c, 0xa0, 0x90, 0x06, 0xa2, 0x30, 0xc7, 0x10, 0xa4, 0xc1, 0x2a,
+  0xcc, 0x31, 0x04, 0x69, 0x30, 0x0a, 0x73, 0x0c, 0x41, 0x1a, 0x98, 0xc2,
+  0xb0, 0x01, 0x51, 0x04, 0x00, 0xb0, 0xcd, 0x50, 0xd5, 0x02, 0x2a, 0xcc,
+  0x31, 0x94, 0x02, 0x1a, 0x9c, 0xc2, 0x1c, 0x43, 0x80, 0x06, 0xb0, 0x30,
+  0xc7, 0x10, 0xa0, 0x01, 0x2a, 0xcc, 0x31, 0x04, 0x68, 0xb0, 0x0a, 0xc3,
+  0x06, 0x44, 0x11, 0x00, 0xc0, 0x46, 0x03, 0x2c, 0xe8, 0x82, 0x2f, 0xec,
+  0x33, 0x04, 0xbb, 0xb0, 0x0b, 0xc3, 0x06, 0x44, 0x80, 0x06, 0x00, 0xb0,
+  0xcf, 0x20, 0xf0, 0x02, 0x38, 0x0c, 0x1b, 0x10, 0xc1, 0x19, 0x00, 0xc0,
+  0x3e, 0xc3, 0xd0, 0x0b, 0xbe, 0x30, 0x6c, 0x40, 0x04, 0x66, 0x00, 0x00,
+  0xfb, 0x0c, 0x84, 0x2f, 0xc8, 0xc2, 0xb0, 0x01, 0x11, 0x94, 0x01, 0x00,
+  0xec, 0x33, 0x14, 0xbf, 0x20, 0x0b, 0xc3, 0x06, 0x44, 0x40, 0x06, 0x00,
+  0xb0, 0xd1, 0x60, 0x0b, 0xe0, 0x10, 0x0e, 0xc3, 0x06, 0x44, 0x30, 0x06,
+  0x00, 0x80, 0xe1, 0x40, 0x04, 0x00, 0x00, 0x00, 0x16, 0x61, 0x00, 0xd3,
+  0x14, 0x21, 0x81, 0x41, 0x1c, 0x0f, 0x80, 0x2d, 0x0e, 0x30, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};

+ 346 - 0
DX12DefaultMissShader.h

@@ -0,0 +1,346 @@
+#if 0
+; shader debug name: x64\Debug\DX12DefaultMissShader.pdb
+; shader hash: 052b3e9870383e65fb0e0abd6fb1d924
+;
+; Buffer Definitions:
+;
+;
+; Resource Bindings:
+;
+; Name                                 Type  Format         Dim      ID      HLSL Bind  Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%struct.HitInfo = type { [5 x <4 x float>], [5 x float], i32 }
+
+@dx.nothing.a = internal constant [1 x i32] zeroinitializer
+
+; Function Attrs: nounwind
+define void @"\01?Miss@@YAXUHitInfo@@@Z"(%struct.HitInfo* noalias %payload) #0 {
+  %1 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %2 = load i32, i32* %1, align 4
+  %3 = icmp ult i32 %2, 5
+  %4 = icmp ne i1 %3, false
+  %5 = icmp ne i1 %4, false
+  br i1 %5, label %6, label %15
+
+; <label>:6                                       ; preds = %0
+  %7 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %8 = load i32, i32* %7, align 4
+  %9 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 0, i32 %8
+  %10 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store <4 x float> <float 0x3FC99999A0000000, float 0x3FC99999A0000000, float 0x3FC99999A0000000, float -1.000000e+00>, <4 x float>* %9, align 4
+  %11 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %payload, i32 0, i32 2
+  %12 = load i32, i32* %11, align 4
+  %13 = add i32 %12, 1
+  %14 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store i32 %13, i32* %11, align 4
+  br label %15
+
+; <label>:15                                      ; preds = %6, %0
+  %16 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  ret void
+}
+
+attributes #0 = { nounwind }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!1}
+!dx.shaderModel = !{!2}
+!dx.typeAnnotations = !{!3, !8}
+!dx.dxrPayloadAnnotations = !{!14}
+!dx.entryPoints = !{!18, !20}
+
+!0 = !{!"dxcoob 1.8.2502.11 (239921522)"}
+!1 = !{i32 1, i32 8}
+!2 = !{!"lib", i32 6, i32 8}
+!3 = !{i32 0, %struct.HitInfo undef, !4}
+!4 = !{i32 152, !5, !6, !7}
+!5 = !{i32 6, !"color", i32 3, i32 0, i32 7, i32 9, i32 13, i32 4}
+!6 = !{i32 6, !"distance", i32 3, i32 80, i32 7, i32 9}
+!7 = !{i32 6, !"hitCount", i32 3, i32 148, i32 7, i32 5}
+!8 = !{i32 1, void (%struct.HitInfo*)* @"\01?Miss@@YAXUHitInfo@@@Z", !9}
+!9 = !{!10, !12}
+!10 = !{i32 1, !11, !11}
+!11 = !{}
+!12 = !{i32 2, !13, !11}
+!13 = !{i32 4, !"SV_RayPayload"}
+!14 = !{i32 0, %struct.HitInfo undef, !15}
+!15 = !{!16, !17, !16}
+!16 = !{i32 0, i32 13107}
+!17 = !{i32 0, i32 12339}
+!18 = !{null, !"", null, null, !19}
+!19 = !{i32 0, i64 1}
+!20 = !{void (%struct.HitInfo*)* @"\01?Miss@@YAXUHitInfo@@@Z", !"\01?Miss@@YAXUHitInfo@@@Z", null, null, !21}
+!21 = !{i32 8, i32 11, i32 6, i32 104, i32 5, !22}
+!22 = !{i32 0}
+
+#endif
+
+const unsigned char DX12DefaultMissShaderBytes[] = {
+  0x44, 0x58, 0x42, 0x43, 0x42, 0x20, 0x00, 0x8a, 0xa3, 0x3c, 0x12, 0x3d,
+  0x38, 0x51, 0xbe, 0x6b, 0x8e, 0xc8, 0xd9, 0x62, 0x01, 0x00, 0x00, 0x00,
+  0x40, 0x0c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0x48, 0x06, 0x00, 0x00, 0x78, 0x06, 0x00, 0x00, 0x94, 0x06, 0x00, 0x00,
+  0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x28, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x12, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x32, 0x33, 0x39, 0x39, 0x32, 0x31, 0x35, 0x32,
+  0x00, 0x31, 0x2e, 0x38, 0x2e, 0x32, 0x35, 0x30, 0x32, 0x2e, 0x31, 0x31,
+  0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0x41, 0x54, 0x7c, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x38, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x01, 0x3f, 0x4d, 0x69, 0x73, 0x73, 0x40, 0x40, 0x59, 0x41, 0x58,
+  0x55, 0x48, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x40, 0x40, 0x40, 0x5a,
+  0x00, 0x4d, 0x69, 0x73, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+  0xff, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x63, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xff, 0xff, 0xff, 0xff, 0x53, 0x54, 0x41, 0x54, 0x40, 0x05, 0x00, 0x00,
+  0x68, 0x00, 0x06, 0x00, 0x50, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c,
+  0x08, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x28, 0x05, 0x00, 0x00,
+  0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00,
+  0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
+  0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
+  0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14,
+  0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x42, 0x88, 0x48, 0x90, 0x14, 0x20,
+  0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90,
+  0x11, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a,
+  0x04, 0x21, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x1b, 0x88, 0x20, 0x00, 0x92, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff,
+  0x03, 0x20, 0x01, 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84,
+  0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c,
+  0x0b, 0x84, 0x84, 0x4c, 0x10, 0x38, 0x73, 0x04, 0x60, 0x90, 0x01, 0x40,
+  0x31, 0x02, 0x30, 0x03, 0x30, 0x8c, 0x40, 0x10, 0x59, 0x50, 0x59, 0x40,
+  0xe7, 0x48, 0x53, 0x44, 0x09, 0x93, 0x1f, 0x22, 0x93, 0xd8, 0x14, 0x0e,
+  0x1a, 0xec, 0x80, 0xb0, 0x08, 0x93, 0xa4, 0x03, 0x01, 0x73, 0x04, 0xa0,
+  0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87,
+  0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50,
+  0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30,
+  0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0,
+  0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20,
+  0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+  0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90,
+  0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10,
+  0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20,
+  0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
+  0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60,
+  0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f,
+  0x24, 0x90, 0x21, 0x23, 0x25, 0x40, 0x00, 0x1e, 0xb0, 0x31, 0xe4, 0x51,
+  0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b,
+  0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14,
+  0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82,
+  0x12, 0x28, 0x88, 0x11, 0x80, 0x62, 0x28, 0x58, 0x81, 0x32, 0x28, 0x87,
+  0x92, 0x28, 0x8d, 0x42, 0x28, 0xd0, 0x80, 0x42, 0x15, 0x28, 0x85, 0x22,
+  0x28, 0x73, 0xe6, 0x80, 0x32, 0x07, 0x0e, 0x28, 0x8b, 0x82, 0x0e, 0x28,
+  0x13, 0xea, 0x12, 0x20, 0x9c, 0x01, 0xa0, 0x18, 0x01, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90,
+  0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24,
+  0xc6, 0x05, 0xc7, 0x45, 0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04,
+  0x45, 0x66, 0x26, 0x27, 0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43,
+  0x10, 0x4c, 0x10, 0x00, 0x61, 0x82, 0x00, 0x0c, 0x1b, 0x84, 0x81, 0x98,
+  0x20, 0x00, 0xc4, 0x06, 0xc1, 0x30, 0x38, 0xb0, 0xa5, 0x89, 0x4d, 0x10,
+  0x80, 0x62, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x01, 0xb1, 0x26, 0x08, 0x80,
+  0xc1, 0x62, 0xec, 0x8d, 0xed, 0x4d, 0x6e, 0x82, 0x00, 0x1c, 0x13, 0x04,
+  0x00, 0x99, 0x20, 0x00, 0xc9, 0x04, 0x01, 0x50, 0x26, 0x08, 0xc0, 0xb2,
+  0x01, 0x49, 0x1a, 0xc7, 0x78, 0xa0, 0x48, 0x22, 0x42, 0x96, 0x36, 0x47,
+  0x17, 0xe6, 0x36, 0x56, 0x36, 0x41, 0x00, 0x98, 0x0d, 0x46, 0x42, 0x39,
+  0xd5, 0x03, 0x11, 0x41, 0x4b, 0xa3, 0x1b, 0x7a, 0xab, 0x73, 0xa3, 0x9b,
+  0x20, 0x00, 0xcd, 0x04, 0x01, 0x70, 0x36, 0x18, 0xc9, 0xe5, 0x60, 0x4f,
+  0xb6, 0x81, 0x60, 0x26, 0x4b, 0xdb, 0x30, 0x18, 0xcb, 0x36, 0x41, 0x58,
+  0x82, 0x0d, 0xc0, 0x86, 0x61, 0xf0, 0xbc, 0x09, 0x02, 0xf0, 0xb0, 0x99,
+  0xb2, 0xfa, 0x92, 0x0a, 0xcb, 0x83, 0x0a, 0xcb, 0x63, 0x7b, 0x0b, 0x23,
+  0xdb, 0x20, 0x48, 0x61, 0xb0, 0x61, 0x00, 0x03, 0x31, 0xf0, 0x36, 0x08,
+  0xdf, 0x18, 0x6c, 0x18, 0x86, 0x8e, 0x0c, 0x26, 0x08, 0x00, 0xb4, 0x41,
+  0x30, 0xcc, 0x60, 0x82, 0x00, 0x44, 0x1b, 0x04, 0x03, 0x0d, 0x36, 0x0c,
+  0x67, 0x90, 0x06, 0x67, 0xb0, 0x61, 0x30, 0x16, 0x35, 0x20, 0x30, 0x41,
+  0x68, 0xaa, 0x0d, 0x82, 0xd1, 0x06, 0x1b, 0x0a, 0x80, 0x0d, 0x00, 0xc0,
+  0x0d, 0x78, 0x05, 0xfc, 0x34, 0xa5, 0xcd, 0xcd, 0x01, 0x01, 0x65, 0x05,
+  0x61, 0x55, 0x21, 0xa5, 0xd1, 0x25, 0xb9, 0x99, 0xbd, 0x01, 0x01, 0x01,
+  0x69, 0x4d, 0x10, 0x00, 0x69, 0x82, 0x00, 0x4c, 0x1b, 0x02, 0x63, 0x83,
+  0x41, 0xc4, 0x41, 0x22, 0x07, 0xd9, 0x1c, 0x6c, 0x28, 0x3a, 0x38, 0x00,
+  0x00, 0x3a, 0x20, 0x22, 0x26, 0x17, 0xe6, 0x36, 0x86, 0x56, 0x36, 0xc7,
+  0x22, 0xcd, 0x6d, 0x8e, 0x6e, 0x6e, 0x82, 0x00, 0x50, 0x24, 0xd2, 0xdc,
+  0xe8, 0xe6, 0x36, 0x18, 0x76, 0x30, 0xdc, 0x01, 0x1e, 0xe4, 0x81, 0x54,
+  0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, 0x4a,
+  0x10, 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, 0x73,
+  0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, 0xca,
+  0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2,
+  0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x41, 0x52, 0x89, 0x0c,
+  0xcf, 0x85, 0x2e, 0x0f, 0xae, 0x2c, 0xc8, 0xcd, 0xed, 0x8d, 0x2e, 0x8c,
+  0x2e, 0xed, 0xcd, 0x6d, 0x6e, 0x8a, 0xb0, 0x91, 0x41, 0x31, 0x32, 0x3c,
+  0x17, 0x32, 0x3c, 0x39, 0xa8, 0xb0, 0x3c, 0xb6, 0xb7, 0x30, 0xb2, 0x20,
+  0x37, 0xb7, 0x37, 0xba, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29, 0x81,
+  0x1a, 0xd4, 0x21, 0xc3, 0x73, 0x29, 0x73, 0xa3, 0x93, 0xcb, 0x83, 0x7a,
+  0x4b, 0x73, 0xa3, 0x9b, 0x9b, 0x22, 0xb8, 0x01, 0x1d, 0x74, 0x21, 0xc3,
+  0x73, 0x19, 0x7b, 0xab, 0x73, 0xa3, 0x2b, 0x93, 0x9b, 0x9b, 0x12, 0xe4,
+  0x01, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
+  0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+  0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+  0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+  0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+  0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+  0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+  0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+  0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+  0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+  0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+  0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+  0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+  0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+  0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+  0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+  0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+  0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+  0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+  0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+  0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+  0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+  0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8,
+  0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b,
+  0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a,
+  0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e,
+  0xf0, 0x30, 0x83, 0x81, 0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1,
+  0x1c, 0xc2, 0x61, 0x1d, 0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00,
+  0x71, 0x20, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x15, 0x70, 0x05, 0x7e,
+  0xcd, 0xf4, 0x7c, 0x0e, 0x04, 0x66, 0x83, 0xd8, 0x2a, 0x32, 0x4d, 0x4f,
+  0xba, 0xcd, 0x6f, 0x20, 0x10, 0xa8, 0x35, 0x00, 0x66, 0xb8, 0xfc, 0xc6,
+  0x99, 0x0e, 0xa4, 0x31, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x49, 0x4c, 0x44, 0x4e, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00,
+  0x78, 0x36, 0x34, 0x5c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x5c, 0x44, 0x58,
+  0x31, 0x32, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x69, 0x73,
+  0x73, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x64, 0x62, 0x00,
+  0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x05, 0x2b, 0x3e, 0x98, 0x70, 0x38, 0x3e, 0x65, 0xfb, 0x0e, 0x0a, 0xbd,
+  0x6f, 0xb1, 0xd9, 0x24, 0x44, 0x58, 0x49, 0x4c, 0xa4, 0x05, 0x00, 0x00,
+  0x68, 0x00, 0x06, 0x00, 0x69, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c,
+  0x08, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8c, 0x05, 0x00, 0x00,
+  0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00,
+  0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
+  0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
+  0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
+  0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20,
+  0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90,
+  0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a,
+  0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x1b, 0x88, 0x20, 0x00, 0x92, 0x0d, 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff,
+  0x03, 0x20, 0x01, 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
+  0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84,
+  0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c,
+  0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x48, 0x73, 0x04, 0x60, 0x90, 0x01, 0x80,
+  0xc2, 0x08, 0xc0, 0x0c, 0xc0, 0x30, 0x02, 0x41, 0x64, 0x41, 0xc9, 0x02,
+  0x72, 0x8e, 0x34, 0x45, 0x94, 0x30, 0xf9, 0x21, 0x32, 0x89, 0x4d, 0xe1,
+  0xa0, 0xc1, 0x1c, 0x40, 0xa8, 0x08, 0x23, 0x91, 0x1a, 0x08, 0x98, 0x23,
+  0x00, 0x05, 0x02, 0x73, 0x04, 0xc1, 0x14, 0x00, 0x15, 0x00, 0x00, 0x00,
+  0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79,
+  0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e,
+  0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07,
+  0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
+  0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07,
+  0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+  0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x24, 0x90, 0x21, 0x23,
+  0x25, 0x40, 0x00, 0x1e, 0xae, 0x31, 0xe4, 0x51, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
+  0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x02, 0x25, 0x50, 0x10, 0xc5,
+  0x30, 0x02, 0x50, 0xb0, 0x02, 0x65, 0x50, 0x0e, 0x25, 0x51, 0x1a, 0x85,
+  0x50, 0xa0, 0x01, 0x85, 0x2a, 0x50, 0x0a, 0x45, 0x50, 0xe6, 0xcc, 0x01,
+  0x65, 0x0e, 0x1c, 0x50, 0x16, 0x05, 0x1d, 0x40, 0xad, 0x04, 0x08, 0xcd,
+  0x00, 0x50, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+  0x6a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44,
+  0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45,
+  0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04, 0x45, 0x66, 0x26, 0x27,
+  0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x00,
+  0x61, 0x82, 0x00, 0x0c, 0x1b, 0x84, 0x81, 0xe0, 0xc0, 0x96, 0x26, 0x36,
+  0x41, 0x00, 0x88, 0x0d, 0x83, 0x71, 0x10, 0x13, 0x04, 0xa0, 0x98, 0x20,
+  0x20, 0xd5, 0x04, 0x01, 0x30, 0x58, 0x8c, 0xbd, 0xb1, 0xbd, 0xc9, 0x4d,
+  0x10, 0x80, 0x63, 0x82, 0x00, 0x20, 0x13, 0x04, 0x20, 0x99, 0x20, 0x00,
+  0xca, 0x04, 0x01, 0x58, 0x36, 0x20, 0x07, 0xd3, 0x24, 0xce, 0x03, 0x45,
+  0x44, 0xc8, 0xd2, 0xe6, 0xe8, 0xc2, 0xdc, 0xc6, 0xca, 0x26, 0x08, 0x00,
+  0xb3, 0xc1, 0x38, 0xa6, 0x86, 0x72, 0x1e, 0x22, 0x68, 0x69, 0x74, 0x43,
+  0x6f, 0x75, 0x6e, 0x74, 0x13, 0x04, 0xa0, 0x99, 0x20, 0x00, 0xce, 0x06,
+  0xe3, 0xb0, 0x9a, 0xcb, 0xc1, 0x36, 0x10, 0x8b, 0x54, 0x65, 0x1b, 0x86,
+  0x44, 0xd1, 0x26, 0x08, 0x4b, 0xb0, 0x01, 0xd8, 0x30, 0x0c, 0x5d, 0x37,
+  0x41, 0x00, 0x1e, 0x36, 0x53, 0x56, 0x5f, 0x52, 0x61, 0x79, 0x50, 0x61,
+  0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1b, 0x84, 0x08, 0x0c, 0x36, 0x0c, 0x5f,
+  0x18, 0x74, 0x1b, 0x04, 0x4f, 0x0c, 0x36, 0x0c, 0x03, 0x37, 0x06, 0x13,
+  0x04, 0x00, 0xda, 0x20, 0x24, 0x65, 0x30, 0x41, 0x00, 0xa2, 0x0d, 0x42,
+  0x72, 0x06, 0x1b, 0x06, 0x33, 0x40, 0x03, 0x33, 0xd8, 0x30, 0x24, 0x4a,
+  0x1a, 0x10, 0x98, 0x20, 0x34, 0xd4, 0x06, 0x21, 0x61, 0x83, 0x0d, 0x05,
+  0xb0, 0x06, 0x00, 0xd0, 0x06, 0xbc, 0x02, 0x7e, 0x9a, 0xd2, 0xe6, 0xe6,
+  0x80, 0x80, 0xb2, 0x82, 0xb0, 0xaa, 0x90, 0xd2, 0xe8, 0x92, 0xdc, 0xcc,
+  0xde, 0x80, 0x80, 0x80, 0xb4, 0x26, 0x08, 0x80, 0x34, 0x41, 0x00, 0xa6,
+  0x0d, 0x41, 0xb2, 0xc1, 0x20, 0xe0, 0xe0, 0x88, 0x03, 0x4c, 0x0e, 0x36,
+  0x14, 0xdc, 0x1b, 0x00, 0xc0, 0x1c, 0x54, 0x61, 0x63, 0xb3, 0x6b, 0x73,
+  0x49, 0x23, 0x2b, 0x73, 0xa3, 0x9b, 0x12, 0x04, 0x55, 0xc8, 0xf0, 0x5c,
+  0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0xa6, 0x04, 0x44, 0x13, 0x32,
+  0x3c, 0x17, 0xbb, 0x30, 0x36, 0xbb, 0x32, 0xb9, 0x29, 0x01, 0x51, 0x87,
+  0x0c, 0xcf, 0x65, 0x0e, 0x2d, 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac,
+  0x8c, 0x6d, 0x4a, 0x70, 0x54, 0x22, 0xc3, 0x73, 0xa1, 0xcb, 0x83, 0x2b,
+  0x0b, 0x72, 0x73, 0x7b, 0xa3, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b,
+  0x22, 0x68, 0x63, 0x50, 0x8c, 0x0c, 0xcf, 0x85, 0x0c, 0x4f, 0x0e, 0x2a,
+  0x2c, 0x8f, 0xed, 0x2d, 0x8c, 0x2c, 0xc8, 0xcd, 0xed, 0x8d, 0x2e, 0x8c,
+  0x2e, 0xed, 0xcd, 0x6d, 0x6e, 0x4a, 0x90, 0x06, 0x75, 0xc8, 0xf0, 0x5c,
+  0xca, 0xdc, 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6,
+  0x08, 0x6d, 0x30, 0x07, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
+  0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
+  0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
+  0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
+  0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
+  0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
+  0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
+  0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
+  0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
+  0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
+  0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
+  0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
+  0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
+  0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
+  0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
+  0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
+  0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
+  0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
+  0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
+  0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
+  0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
+  0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
+  0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87,
+  0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87,
+  0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40,
+  0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x30, 0x83, 0x81, 0xc8, 0x01, 0x1f, 0xdc,
+  0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, 0xdc, 0x40, 0x1c, 0xe4,
+  0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x15, 0x70, 0x05, 0x7e, 0xcd, 0xf4, 0x7c, 0x0e, 0x04, 0x66, 0x83, 0xd8,
+  0x2a, 0x32, 0x4d, 0x4f, 0xba, 0xcd, 0x6f, 0x20, 0x10, 0xa8, 0x35, 0x00,
+  0x66, 0xb8, 0xfc, 0xc6, 0x99, 0x0e, 0xa4, 0x31, 0x7c, 0x00, 0x00, 0x00,
+  0x61, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, 0x04, 0x43, 0x2c,
+  0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xf4, 0x46, 0x00, 0xc8,
+  0x0d, 0x75, 0x04, 0x02, 0x00, 0x14, 0x40, 0x41, 0x65, 0x2c, 0xa2, 0x35,
+  0xe7, 0x9c, 0xfc, 0x5a, 0x73, 0xce, 0xc9, 0xaf, 0x35, 0xe7, 0x9c, 0xfc,
+  0x40, 0x10, 0x04, 0xf1, 0x5f, 0x00, 0x00, 0x00, 0x1b, 0x0d, 0x84, 0xc5,
+  0x50, 0x00, 0xc6, 0x70, 0x43, 0xf0, 0x90, 0xc1, 0x70, 0x43, 0x60, 0x84,
+  0xc1, 0x70, 0x43, 0x70, 0x84, 0xc1, 0x2c, 0x43, 0x20, 0x04, 0x1b, 0x0d,
+  0xc9, 0x16, 0x51, 0x00, 0xc6, 0x46, 0xc4, 0xd2, 0x75, 0x01, 0x29, 0x00,
+  0x0c, 0x1b, 0x10, 0x82, 0x32, 0x00, 0x1b, 0x0d, 0xcd, 0x57, 0x51, 0x00,
+  0x46, 0x05, 0x64, 0x00, 0xe4, 0x00, 0x30, 0x6c, 0x40, 0x10, 0xc2, 0x00,
+  0xcc, 0x12, 0x08, 0xf4, 0x00, 0x80, 0xe1, 0x40, 0x02, 0x00, 0x00, 0x00,
+  0x76, 0x71, 0x3c, 0x00, 0xb6, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00
+};

+ 1066 - 0
DX12DefaultRayGenShader.h

@@ -0,0 +1,1066 @@
+#if 0
+;
+; Note: shader requires additional functionality:
+;       Typed UAV Load Additional Formats
+;
+; shader debug name: x64\Debug\DX12DefaultRayGenShader.pdb
+; shader hash: 88547d06513608ba90f100b99ad6d220
+;
+; Buffer Definitions:
+;
+; cbuffer RayGenerationSettings
+; {
+;
+;   struct hostlayout.RayGenerationSettings
+;   {
+;
+;       int renderGui;                                ; Offset:    0
+;       int useRays;                                  ; Offset:    4
+;       float minDistance;                            ; Offset:    8
+;       float maxDistance;                            ; Offset:   12
+;       row_major float4x4 inverseView;               ; Offset:   16
+;       row_major float4x4 inverseProjection;         ; Offset:   80
+;   
+;   } RayGenerationSettings;                          ; Offset:    0 Size:   144
+;
+; }
+;
+;
+; Resource Bindings:
+;
+; Name                                 Type  Format         Dim      ID      HLSL Bind  Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+; RayGenerationSettings             cbuffer      NA          NA     CB0            cb0     1
+; TLAS                              texture     i32         ras      T0             t0     1
+; gOutput                               UAV     f32          2d      U0             u0     1
+; guiTexture                            UAV     f32          2d      U1             u1     1
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%dx.types.Handle = type { i8* }
+%hostlayout.RayGenerationSettings = type { i32, i32, float, float, [4 x <4 x float>], [4 x <4 x float>] }
+%struct.HitInfo = type { [5 x <4 x float>], [5 x float], i32 }
+%struct.RayDesc = type { <3 x float>, float, <3 x float>, float }
+%dx.types.ResourceProperties = type { i32, i32 }
+%dx.types.CBufRet.i32 = type { i32, i32, i32, i32 }
+%dx.types.CBufRet.f32 = type { float, float, float, float }
+%dx.types.Dimensions = type { i32, i32, i32, i32 }
+%dx.types.ResRet.f32 = type { float, float, float, float, i32 }
+%struct.RaytracingAccelerationStructure = type { i32 }
+%"class.RWTexture2D<vector<float, 4> >" = type { <4 x float> }
+
+@"\01?gOutput@@3V?$RWTexture2D@V?$vector@M$03@@@@A" = external constant %dx.types.Handle, align 4
+@"\01?guiTexture@@3V?$RWTexture2D@V?$vector@M$03@@@@A" = external constant %dx.types.Handle, align 4
+@"\01?TLAS@@3URaytracingAccelerationStructure@@A" = external constant %dx.types.Handle, align 4
+@RayGenerationSettings_legacy = external global %hostlayout.RayGenerationSettings
+@dx.nothing.a = internal constant [1 x i32] zeroinitializer
+
+; Function Attrs: nounwind
+define void @"\01?RayGen@@YAXXZ"() #0 {
+  %1 = load %dx.types.Handle, %dx.types.Handle* @"\01?TLAS@@3URaytracingAccelerationStructure@@A"
+  %2 = load %dx.types.Handle, %dx.types.Handle* @"\01?guiTexture@@3V?$RWTexture2D@V?$vector@M$03@@@@A"
+  %3 = load %dx.types.Handle, %dx.types.Handle* @"\01?gOutput@@3V?$RWTexture2D@V?$vector@M$03@@@@A"
+  %4 = load %hostlayout.RayGenerationSettings, %hostlayout.RayGenerationSettings* @RayGenerationSettings_legacy
+  %5 = alloca %struct.HitInfo, align 4
+  %6 = alloca %struct.RayDesc, align 4
+  %7 = alloca i32, align 4
+  %8 = alloca i32, align 4
+  %9 = alloca i32, align 4
+  %10 = alloca i32, align 4
+  %11 = call %dx.types.Handle @dx.op.createHandleForLib.hostlayout.RayGenerationSettings(i32 160, %hostlayout.RayGenerationSettings %4)  ; CreateHandleForLib(Resource)
+  %12 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %11, %dx.types.ResourceProperties { i32 13, i32 144 })  ; AnnotateHandle(res,props)  resource: CBuffer
+  %13 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %5, i32 0, i32 2
+  %14 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store i32 0, i32* %13, align 4
+  %15 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %16 = call i32 @dx.op.dispatchRaysDimensions.i32(i32 146, i8 0)  ; DispatchRaysDimensions(col)
+  %17 = call i32 @dx.op.dispatchRaysDimensions.i32(i32 146, i8 1)  ; DispatchRaysDimensions(col)
+  %18 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %19 = uitofp i32 %16 to float
+  %20 = uitofp i32 %17 to float
+  %21 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %22 = call i32 @dx.op.dispatchRaysIndex.i32(i32 145, i8 0)  ; DispatchRaysIndex(col)
+  %23 = call i32 @dx.op.dispatchRaysIndex.i32(i32 145, i8 1)  ; DispatchRaysIndex(col)
+  %24 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %25 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %26 = uitofp i32 %22 to float
+  %27 = uitofp i32 %23 to float
+  %28 = fadd fast float %26, 5.000000e-01
+  %29 = fadd fast float %27, 5.000000e-01
+  %30 = fdiv fast float %28, %19
+  %31 = fdiv fast float %29, %20
+  %32 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %33 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %12, i32 0)  ; CBufferLoadLegacy(handle,regIndex)
+  %34 = extractvalue %dx.types.CBufRet.i32 %33, 1
+  %35 = icmp ne i32 %34, 0
+  br i1 %35, label %36, label %209
+
+; <label>:36                                      ; preds = %0
+  %37 = fmul fast float %30, 2.000000e+00
+  %38 = fmul fast float %31, 2.000000e+00
+  %39 = fsub fast float %37, 1.000000e+00
+  %40 = fsub fast float %38, 1.000000e+00
+  %41 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %42 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 1)  ; CBufferLoadLegacy(handle,regIndex)
+  %43 = extractvalue %dx.types.CBufRet.f32 %42, 3
+  %44 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 2)  ; CBufferLoadLegacy(handle,regIndex)
+  %45 = extractvalue %dx.types.CBufRet.f32 %44, 3
+  %46 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 3)  ; CBufferLoadLegacy(handle,regIndex)
+  %47 = extractvalue %dx.types.CBufRet.f32 %46, 3
+  %48 = call float @dx.op.tertiary.f32(i32 46, float %43, float 1.000000e+00, float 0.000000e+00)  ; FMad(a,b,c)
+  %49 = call float @dx.op.tertiary.f32(i32 46, float %45, float 1.000000e+00, float 0.000000e+00)  ; FMad(a,b,c)
+  %50 = call float @dx.op.tertiary.f32(i32 46, float %47, float 1.000000e+00, float 0.000000e+00)  ; FMad(a,b,c)
+  %51 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %52 = insertelement <3 x float> undef, float %48, i32 0
+  %53 = insertelement <3 x float> %52, float %49, i32 1
+  %54 = insertelement <3 x float> %53, float %50, i32 2
+  %55 = getelementptr inbounds %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 0
+  %56 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store <3 x float> %54, <3 x float>* %55, align 4
+  %57 = fsub fast float -0.000000e+00, %40
+  %58 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 5)  ; CBufferLoadLegacy(handle,regIndex)
+  %59 = extractvalue %dx.types.CBufRet.f32 %58, 0
+  %60 = extractvalue %dx.types.CBufRet.f32 %58, 1
+  %61 = extractvalue %dx.types.CBufRet.f32 %58, 2
+  %62 = extractvalue %dx.types.CBufRet.f32 %58, 3
+  %63 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 6)  ; CBufferLoadLegacy(handle,regIndex)
+  %64 = extractvalue %dx.types.CBufRet.f32 %63, 0
+  %65 = extractvalue %dx.types.CBufRet.f32 %63, 1
+  %66 = extractvalue %dx.types.CBufRet.f32 %63, 2
+  %67 = extractvalue %dx.types.CBufRet.f32 %63, 3
+  %68 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 7)  ; CBufferLoadLegacy(handle,regIndex)
+  %69 = extractvalue %dx.types.CBufRet.f32 %68, 0
+  %70 = extractvalue %dx.types.CBufRet.f32 %68, 1
+  %71 = extractvalue %dx.types.CBufRet.f32 %68, 2
+  %72 = extractvalue %dx.types.CBufRet.f32 %68, 3
+  %73 = fmul fast float %59, %39
+  %74 = call float @dx.op.tertiary.f32(i32 46, float %60, float %57, float %73)  ; FMad(a,b,c)
+  %75 = call float @dx.op.tertiary.f32(i32 46, float %61, float -1.000000e+00, float %74)  ; FMad(a,b,c)
+  %76 = call float @dx.op.tertiary.f32(i32 46, float %62, float 1.000000e+00, float %75)  ; FMad(a,b,c)
+  %77 = fmul fast float %64, %39
+  %78 = call float @dx.op.tertiary.f32(i32 46, float %65, float %57, float %77)  ; FMad(a,b,c)
+  %79 = call float @dx.op.tertiary.f32(i32 46, float %66, float -1.000000e+00, float %78)  ; FMad(a,b,c)
+  %80 = call float @dx.op.tertiary.f32(i32 46, float %67, float 1.000000e+00, float %79)  ; FMad(a,b,c)
+  %81 = fmul fast float %69, %39
+  %82 = call float @dx.op.tertiary.f32(i32 46, float %70, float %57, float %81)  ; FMad(a,b,c)
+  %83 = call float @dx.op.tertiary.f32(i32 46, float %71, float -1.000000e+00, float %82)  ; FMad(a,b,c)
+  %84 = call float @dx.op.tertiary.f32(i32 46, float %72, float 1.000000e+00, float %83)  ; FMad(a,b,c)
+  %85 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %86 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %87 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 1)  ; CBufferLoadLegacy(handle,regIndex)
+  %88 = extractvalue %dx.types.CBufRet.f32 %87, 0
+  %89 = extractvalue %dx.types.CBufRet.f32 %87, 1
+  %90 = extractvalue %dx.types.CBufRet.f32 %87, 2
+  %91 = extractvalue %dx.types.CBufRet.f32 %87, 3
+  %92 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 2)  ; CBufferLoadLegacy(handle,regIndex)
+  %93 = extractvalue %dx.types.CBufRet.f32 %92, 0
+  %94 = extractvalue %dx.types.CBufRet.f32 %92, 1
+  %95 = extractvalue %dx.types.CBufRet.f32 %92, 2
+  %96 = extractvalue %dx.types.CBufRet.f32 %92, 3
+  %97 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 3)  ; CBufferLoadLegacy(handle,regIndex)
+  %98 = extractvalue %dx.types.CBufRet.f32 %97, 0
+  %99 = extractvalue %dx.types.CBufRet.f32 %97, 1
+  %100 = extractvalue %dx.types.CBufRet.f32 %97, 2
+  %101 = extractvalue %dx.types.CBufRet.f32 %97, 3
+  %102 = fmul fast float %88, %76
+  %103 = call float @dx.op.tertiary.f32(i32 46, float %89, float %80, float %102)  ; FMad(a,b,c)
+  %104 = call float @dx.op.tertiary.f32(i32 46, float %90, float %84, float %103)  ; FMad(a,b,c)
+  %105 = call float @dx.op.tertiary.f32(i32 46, float %91, float 1.000000e+00, float %104)  ; FMad(a,b,c)
+  %106 = fmul fast float %93, %76
+  %107 = call float @dx.op.tertiary.f32(i32 46, float %94, float %80, float %106)  ; FMad(a,b,c)
+  %108 = call float @dx.op.tertiary.f32(i32 46, float %95, float %84, float %107)  ; FMad(a,b,c)
+  %109 = call float @dx.op.tertiary.f32(i32 46, float %96, float 1.000000e+00, float %108)  ; FMad(a,b,c)
+  %110 = fmul fast float %98, %76
+  %111 = call float @dx.op.tertiary.f32(i32 46, float %99, float %80, float %110)  ; FMad(a,b,c)
+  %112 = call float @dx.op.tertiary.f32(i32 46, float %100, float %84, float %111)  ; FMad(a,b,c)
+  %113 = call float @dx.op.tertiary.f32(i32 46, float %101, float 1.000000e+00, float %112)  ; FMad(a,b,c)
+  %114 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %115 = getelementptr inbounds %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 0
+  %116 = load <3 x float>, <3 x float>* %115, align 4
+  %117 = extractelement <3 x float> %116, i32 0
+  %118 = fsub fast float %105, %117
+  %119 = extractelement <3 x float> %116, i32 1
+  %120 = fsub fast float %109, %119
+  %121 = extractelement <3 x float> %116, i32 2
+  %122 = fsub fast float %113, %121
+  %123 = insertelement <3 x float> undef, float %118, i32 0
+  %124 = insertelement <3 x float> %123, float %120, i32 1
+  %125 = insertelement <3 x float> %124, float %122, i32 2
+  %126 = getelementptr inbounds %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 2
+  %127 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store <3 x float> %125, <3 x float>* %126, align 4
+  %128 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 0)  ; CBufferLoadLegacy(handle,regIndex)
+  %129 = extractvalue %dx.types.CBufRet.f32 %128, 2
+  %130 = getelementptr inbounds %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 1
+  %131 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store float %129, float* %130, align 4
+  %132 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %12, i32 0)  ; CBufferLoadLegacy(handle,regIndex)
+  %133 = extractvalue %dx.types.CBufRet.f32 %132, 3
+  %134 = getelementptr inbounds %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 3
+  %135 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  store float %133, float* %134, align 4
+  %136 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %1)  ; CreateHandleForLib(Resource)
+  %137 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %136, %dx.types.ResourceProperties { i32 16, i32 0 })  ; AnnotateHandle(res,props)  resource: RTAccelerationStructure
+  %138 = getelementptr %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 0
+  %139 = load <3 x float>, <3 x float>* %138
+  %140 = extractelement <3 x float> %139, i64 0
+  %141 = extractelement <3 x float> %139, i64 1
+  %142 = extractelement <3 x float> %139, i64 2
+  %143 = getelementptr %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 1
+  %144 = load float, float* %143
+  %145 = getelementptr %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 2
+  %146 = load <3 x float>, <3 x float>* %145
+  %147 = extractelement <3 x float> %146, i64 0
+  %148 = extractelement <3 x float> %146, i64 1
+  %149 = extractelement <3 x float> %146, i64 2
+  %150 = getelementptr %struct.RayDesc, %struct.RayDesc* %6, i32 0, i32 3
+  %151 = load float, float* %150
+  call void @dx.op.traceRay.struct.HitInfo(i32 157, %dx.types.Handle %137, i32 0, i32 255, i32 0, i32 0, i32 0, float %140, float %141, float %142, float %144, float %147, float %148, float %149, float %151, %struct.HitInfo* %5)  ; TraceRay(AccelerationStructure,RayFlags,InstanceInclusionMask,RayContributionToHitGroupIndex,MultiplierForGeometryContributionToShaderIndex,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)
+  %152 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %5, i32 0, i32 2
+  %153 = load i32, i32* %152, align 4
+  %154 = sub i32 %153, 1
+  %155 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %5, i32 0, i32 0, i32 %154
+  %156 = load <4 x float>, <4 x float>* %155, align 4
+  %157 = extractelement <4 x float> %156, i32 0
+  %158 = extractelement <4 x float> %156, i32 1
+  %159 = extractelement <4 x float> %156, i32 2
+  %160 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %161 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %5, i32 0, i32 2
+  %162 = load i32, i32* %161, align 4
+  %163 = sub i32 %162, 2
+  %164 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %165 = icmp sge i32 %163, 0
+  br i1 %165, label %166, label %205
+
+; <label>:166                                     ; preds = %36
+  br label %167
+
+; <label>:167                                     ; preds = %198, %166
+  %168 = phi i32 [ %163, %166 ], [ %199, %198 ]
+  %169 = phi float [ %157, %166 ], [ %192, %198 ]
+  %170 = phi float [ %158, %166 ], [ %193, %198 ]
+  %171 = phi float [ %159, %166 ], [ %194, %198 ]
+  %172 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %5, i32 0, i32 0, i32 %168
+  %173 = load <4 x float>, <4 x float>* %172, align 4
+  %174 = extractelement <4 x float> %173, i32 0
+  %175 = extractelement <4 x float> %173, i32 1
+  %176 = extractelement <4 x float> %173, i32 2
+  %177 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %5, i32 0, i32 0, i32 %168
+  %178 = load <4 x float>, <4 x float>* %177, align 4
+  %179 = extractelement <4 x float> %178, i32 3
+  %180 = extractelement <4 x float> %178, i32 3
+  %181 = extractelement <4 x float> %178, i32 3
+  %182 = fmul fast float %174, %179
+  %183 = fmul fast float %175, %180
+  %184 = fmul fast float %176, %181
+  %185 = getelementptr inbounds %struct.HitInfo, %struct.HitInfo* %5, i32 0, i32 0, i32 %168
+  %186 = load <4 x float>, <4 x float>* %185, align 4
+  %187 = extractelement <4 x float> %186, i32 3
+  %188 = fsub fast float 1.000000e+00, %187
+  %189 = fmul fast float %169, %188
+  %190 = fmul fast float %170, %188
+  %191 = fmul fast float %171, %188
+  %192 = fadd fast float %182, %189
+  %193 = fadd fast float %183, %190
+  %194 = fadd fast float %184, %191
+  %195 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %196 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %197 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  br label %198
+
+; <label>:198                                     ; preds = %167
+  %199 = add nsw i32 %168, -1
+  %200 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %201 = icmp sge i32 %199, 0
+  %202 = icmp ne i1 %201, false
+  %203 = icmp ne i1 %202, false
+  br i1 %203, label %167, label %204
+
+; <label>:204                                     ; preds = %198
+  br label %205
+
+; <label>:205                                     ; preds = %204, %36
+  %206 = phi float [ %192, %204 ], [ %157, %36 ]
+  %207 = phi float [ %193, %204 ], [ %158, %36 ]
+  %208 = phi float [ %194, %204 ], [ %159, %36 ]
+  br label %209
+
+; <label>:209                                     ; preds = %205, %0
+  %210 = phi float [ %206, %205 ], [ 0.000000e+00, %0 ]
+  %211 = phi float [ %207, %205 ], [ 0.000000e+00, %0 ]
+  %212 = phi float [ %208, %205 ], [ 0.000000e+00, %0 ]
+  %213 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %3)  ; CreateHandleForLib(Resource)
+  %214 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %213, %dx.types.ResourceProperties { i32 4098, i32 1033 })  ; AnnotateHandle(res,props)  resource: RWTexture2D<4xF32>
+  %215 = call %dx.types.Dimensions @dx.op.getDimensions(i32 72, %dx.types.Handle %214, i32 0)  ; GetDimensions(handle,mipLevel)
+  %216 = extractvalue %dx.types.Dimensions %215, 0
+  store i32 %216, i32* %7
+  %217 = extractvalue %dx.types.Dimensions %215, 1
+  store i32 %217, i32* %8
+  %218 = load i32, i32* %7, align 4
+  %219 = uitofp i32 %218 to float
+  %220 = load i32, i32* %8, align 4
+  %221 = uitofp i32 %220 to float
+  %222 = fmul fast float %30, %219
+  %223 = fmul fast float %31, %221
+  %224 = fptoui float %222 to i32
+  %225 = fptoui float %223 to i32
+  %226 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %227 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %12, i32 0)  ; CBufferLoadLegacy(handle,regIndex)
+  %228 = extractvalue %dx.types.CBufRet.i32 %227, 0
+  %229 = icmp ne i32 %228, 0
+  br i1 %229, label %230, label %266
+
+; <label>:230                                     ; preds = %209
+  %231 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %2)  ; CreateHandleForLib(Resource)
+  %232 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %231, %dx.types.ResourceProperties { i32 4098, i32 1033 })  ; AnnotateHandle(res,props)  resource: RWTexture2D<4xF32>
+  %233 = call %dx.types.Dimensions @dx.op.getDimensions(i32 72, %dx.types.Handle %232, i32 0)  ; GetDimensions(handle,mipLevel)
+  %234 = extractvalue %dx.types.Dimensions %233, 0
+  store i32 %234, i32* %9
+  %235 = extractvalue %dx.types.Dimensions %233, 1
+  store i32 %235, i32* %10
+  %236 = load i32, i32* %9, align 4
+  %237 = uitofp i32 %236 to float
+  %238 = load i32, i32* %10, align 4
+  %239 = uitofp i32 %238 to float
+  %240 = fmul fast float %30, %237
+  %241 = fmul fast float %31, %239
+  %242 = fptoui float %240 to i32
+  %243 = fptoui float %241 to i32
+  %244 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %245 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %2)  ; CreateHandleForLib(Resource)
+  %246 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %245, %dx.types.ResourceProperties { i32 4098, i32 1033 })  ; AnnotateHandle(res,props)  resource: RWTexture2D<4xF32>
+  %247 = call %dx.types.ResRet.f32 @dx.op.textureLoad.f32(i32 66, %dx.types.Handle %246, i32 undef, i32 %242, i32 %243, i32 undef, i32 undef, i32 undef, i32 undef)  ; TextureLoad(srv,mipLevelOrSampleCount,coord0,coord1,coord2,offset0,offset1,offset2)
+  %248 = extractvalue %dx.types.ResRet.f32 %247, 0
+  %249 = extractvalue %dx.types.ResRet.f32 %247, 1
+  %250 = extractvalue %dx.types.ResRet.f32 %247, 2
+  %251 = extractvalue %dx.types.ResRet.f32 %247, 3
+  %252 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %253 = fsub fast float 1.000000e+00, %251
+  %254 = fmul fast float %210, %253
+  %255 = fmul fast float %211, %253
+  %256 = fmul fast float %212, %253
+  %257 = fmul fast float %248, %251
+  %258 = fmul fast float %249, %251
+  %259 = fmul fast float %250, %251
+  %260 = fadd fast float %254, %257
+  %261 = fadd fast float %255, %258
+  %262 = fadd fast float %256, %259
+  %263 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %264 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  %265 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  br label %266
+
+; <label>:266                                     ; preds = %230, %209
+  %267 = phi float [ %260, %230 ], [ %210, %209 ]
+  %268 = phi float [ %261, %230 ], [ %211, %209 ]
+  %269 = phi float [ %262, %230 ], [ %212, %209 ]
+  %270 = call %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32 160, %dx.types.Handle %3)  ; CreateHandleForLib(Resource)
+  %271 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %270, %dx.types.ResourceProperties { i32 4098, i32 1033 })  ; AnnotateHandle(res,props)  resource: RWTexture2D<4xF32>
+  call void @dx.op.textureStore.f32(i32 67, %dx.types.Handle %271, i32 %224, i32 %225, i32 undef, float %267, float %268, float %269, float 1.000000e+00, i8 15)  ; TextureStore(srv,coord0,coord1,coord2,value0,value1,value2,value3,mask)
+  %272 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
+  ret void
+}
+
+; Function Attrs: nounwind readnone
+declare i32 @dx.op.dispatchRaysIndex.i32(i32, i8) #1
+
+; Function Attrs: nounwind readnone
+declare i32 @dx.op.dispatchRaysDimensions.i32(i32, i8) #1
+
+; Function Attrs: nounwind
+declare void @dx.op.traceRay.struct.HitInfo(i32, %dx.types.Handle, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, %struct.HitInfo*) #0
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Dimensions @dx.op.getDimensions(i32, %dx.types.Handle, i32) #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.ResRet.f32 @dx.op.textureLoad.f32(i32, %dx.types.Handle, i32, i32, i32, i32, i32, i32, i32) #2
+
+; Function Attrs: nounwind
+declare void @dx.op.textureStore.f32(i32, %dx.types.Handle, i32, i32, i32, float, float, float, float, i8) #0
+
+; Function Attrs: nounwind readonly
+declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32, %dx.types.Handle, i32) #2
+
+; Function Attrs: nounwind readnone
+declare float @dx.op.tertiary.f32(i32, float, float, float) #1
+
+; Function Attrs: nounwind readnone
+declare %dx.types.Handle @dx.op.annotateHandle(i32, %dx.types.Handle, %dx.types.ResourceProperties) #1
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @dx.op.createHandleForLib.dx.types.Handle(i32, %dx.types.Handle) #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @dx.op.createHandleForLib.hostlayout.RayGenerationSettings(i32, %hostlayout.RayGenerationSettings) #2
+
+attributes #0 = { nounwind }
+attributes #1 = { nounwind readnone }
+attributes #2 = { nounwind readonly }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!1}
+!dx.shaderModel = !{!2}
+!dx.resources = !{!3}
+!dx.typeAnnotations = !{!13}
+!dx.dxrPayloadAnnotations = !{!17}
+!dx.entryPoints = !{!21, !23}
+
+!0 = !{!"dxcoob 1.8.2502.11 (239921522)"}
+!1 = !{i32 1, i32 8}
+!2 = !{!"lib", i32 6, i32 8}
+!3 = !{!4, !7, !11, null}
+!4 = !{!5}
+!5 = !{i32 0, %struct.RaytracingAccelerationStructure* bitcast (%dx.types.Handle* @"\01?TLAS@@3URaytracingAccelerationStructure@@A" to %struct.RaytracingAccelerationStructure*), !"TLAS", i32 0, i32 0, i32 1, i32 16, i32 0, !6}
+!6 = !{i32 0, i32 4}
+!7 = !{!8, !10}
+!8 = !{i32 0, %"class.RWTexture2D<vector<float, 4> >"* bitcast (%dx.types.Handle* @"\01?gOutput@@3V?$RWTexture2D@V?$vector@M$03@@@@A" to %"class.RWTexture2D<vector<float, 4> >"*), !"gOutput", i32 0, i32 0, i32 1, i32 2, i1 false, i1 false, i1 false, !9}
+!9 = !{i32 0, i32 9}
+!10 = !{i32 1, %"class.RWTexture2D<vector<float, 4> >"* bitcast (%dx.types.Handle* @"\01?guiTexture@@3V?$RWTexture2D@V?$vector@M$03@@@@A" to %"class.RWTexture2D<vector<float, 4> >"*), !"guiTexture", i32 0, i32 1, i32 1, i32 2, i1 false, i1 false, i1 false, !9}
+!11 = !{!12}
+!12 = !{i32 0, %hostlayout.RayGenerationSettings* @RayGenerationSettings_legacy, !"RayGenerationSettings", i32 0, i32 0, i32 1, i32 144, null}
+!13 = !{i32 1, void ()* @"\01?RayGen@@YAXXZ", !14}
+!14 = !{!15}
+!15 = !{i32 1, !16, !16}
+!16 = !{}
+!17 = !{i32 0, %struct.HitInfo undef, !18}
+!18 = !{!19, !20, !19}
+!19 = !{i32 0, i32 13107}
+!20 = !{i32 0, i32 12339}
+!21 = !{null, !"", null, !3, !22}
+!22 = !{i32 0, i64 8589942785}
+!23 = !{void ()* @"\01?RayGen@@YAXXZ", !"\01?RayGen@@YAXXZ", null, null, !24}
+!24 = !{i32 8, i32 7, i32 5, !25}
+!25 = !{i32 0}
+
+#endif
+
+const unsigned char DX12DefaultRayGenShaderBytes[] = {
+  0x44, 0x58, 0x42, 0x43, 0x4d, 0x48, 0xab, 0x63, 0x9f, 0x74, 0xec, 0xcb,
+  0x1a, 0xba, 0x08, 0xa0, 0x9a, 0x49, 0x56, 0x19, 0x01, 0x00, 0x00, 0x00,
+  0x20, 0x1d, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00,
+  0x68, 0x0c, 0x00, 0x00, 0x9c, 0x0c, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00,
+  0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x28, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x12, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x32, 0x33, 0x39, 0x39, 0x32, 0x31, 0x35, 0x32,
+  0x00, 0x31, 0x2e, 0x38, 0x2e, 0x32, 0x35, 0x30, 0x32, 0x2e, 0x31, 0x31,
+  0x00, 0x00, 0x00, 0x00, 0x52, 0x44, 0x41, 0x54, 0x58, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x68, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x52, 0x61, 0x79,
+  0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65,
+  0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x00, 0x54, 0x4c, 0x41, 0x53, 0x00,
+  0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x00, 0x67, 0x75, 0x69, 0x54,
+  0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x01, 0x3f, 0x52, 0x61, 0x79,
+  0x47, 0x65, 0x6e, 0x40, 0x40, 0x59, 0x41, 0x58, 0x58, 0x5a, 0x00, 0x52,
+  0x61, 0x79, 0x47, 0x65, 0x6e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x88, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x2f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x63, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54,
+  0x84, 0x0a, 0x00, 0x00, 0x68, 0x00, 0x06, 0x00, 0xa1, 0x02, 0x00, 0x00,
+  0x44, 0x58, 0x49, 0x4c, 0x08, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x6c, 0x0a, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
+  0x98, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
+  0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
+  0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+  0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88,
+  0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42,
+  0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c,
+  0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x1b, 0x88, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07,
+  0x40, 0xda, 0x60, 0x08, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x40,
+  0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00,
+  0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42,
+  0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
+  0x68, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04,
+  0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14,
+  0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xd4, 0xc1, 0x1c,
+  0x01, 0x42, 0xc0, 0x3d, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x7e, 0x08,
+  0x34, 0xc3, 0x42, 0xa0, 0x20, 0x20, 0x61, 0x8e, 0x00, 0x0c, 0x66, 0x00,
+  0x86, 0x11, 0x88, 0x22, 0x09, 0x8c, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05,
+  0xc0, 0x1c, 0x6a, 0xf2, 0x57, 0x00, 0x03, 0x89, 0x86, 0x88, 0x80, 0x09,
+  0x71, 0x1a, 0x96, 0x98, 0x26, 0xa4, 0x31, 0x24, 0x64, 0x10, 0x44, 0x51,
+  0x1c, 0x07, 0x21, 0x19, 0x40, 0x90, 0x32, 0x02, 0x50, 0x02, 0x86, 0x9a,
+  0x32, 0x10, 0x04, 0x40, 0x4f, 0x16, 0x18, 0x59, 0x50, 0x9c, 0x23, 0x4d,
+  0x11, 0x25, 0x4c, 0x7e, 0x88, 0x4c, 0x62, 0x53, 0x38, 0x68, 0x88, 0x24,
+  0x82, 0xa6, 0x12, 0x31, 0x84, 0x40, 0x10, 0x04, 0x41, 0x14, 0x45, 0x51,
+  0x14, 0x45, 0x51, 0x50, 0x54, 0xdd, 0x34, 0x5c, 0xfe, 0x84, 0x3d, 0x84,
+  0xe4, 0x77, 0x08, 0x43, 0x34, 0x12, 0xe2, 0x34, 0x12, 0x22, 0x08, 0x82,
+  0x20, 0x0a, 0x71, 0x11, 0x02, 0x41, 0xd8, 0x4d, 0xc3, 0xe5, 0x4f, 0xd8,
+  0x43, 0x48, 0xfe, 0x4a, 0x48, 0x2b, 0x31, 0xf9, 0xc5, 0x6d, 0xa3, 0xa2,
+  0x28, 0x8a, 0x82, 0x28, 0x8a, 0x46, 0x08, 0x04, 0x41, 0x10, 0x04, 0x41,
+  0xd0, 0x56, 0x16, 0x86, 0x10, 0x08, 0x82, 0x28, 0x8a, 0xa2, 0x00, 0xa8,
+  0x3b, 0x6a, 0xb8, 0xfc, 0x09, 0x7b, 0x08, 0xc9, 0xe7, 0x36, 0xaa, 0x58,
+  0x89, 0xc9, 0x2f, 0x6e, 0x1b, 0x11, 0x45, 0x51, 0x14, 0x85, 0xf8, 0x08,
+  0x81, 0x20, 0xf0, 0xa8, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x9f, 0xdb,
+  0xa8, 0x62, 0x25, 0x26, 0x1f, 0xb9, 0x6d, 0x44, 0x10, 0x04, 0x41, 0x14,
+  0x42, 0x24, 0x04, 0x82, 0xc6, 0x52, 0x14, 0x44, 0x51, 0x14, 0x54, 0xde,
+  0x36, 0x5c, 0xfe, 0x84, 0x3d, 0x84, 0xe4, 0xaf, 0x84, 0xe4, 0x50, 0x91,
+  0x40, 0xa4, 0x91, 0xf3, 0x10, 0xd1, 0x84, 0x10, 0x12, 0x12, 0x08, 0xa2,
+  0x10, 0x02, 0x21, 0x9c, 0x84, 0x96, 0x41, 0x20, 0x04, 0x52, 0xcb, 0x20,
+  0x10, 0x08, 0xb1, 0x03, 0x01, 0x67, 0x06, 0xd2, 0x14, 0x51, 0xc2, 0xe4,
+  0xaf, 0x00, 0x36, 0x45, 0x80, 0x80, 0x34, 0x86, 0x26, 0x08, 0xc4, 0x42,
+  0x44, 0xc0, 0x84, 0x38, 0x0d, 0x3b, 0x45, 0x94, 0x30, 0x51, 0x11, 0x81,
+  0x02, 0x82, 0xde, 0x99, 0xc8, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, 0x61,
+  0x1e, 0xdc, 0x40, 0x16, 0x6e, 0x81, 0x16, 0xca, 0x01, 0x1f, 0xe8, 0xa1,
+  0x1e, 0xe4, 0xa1, 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, 0x61,
+  0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, 0x21,
+  0x1c, 0xe8, 0x81, 0x0d, 0xc0, 0x80, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, 0x00,
+  0x05, 0x06, 0xc5, 0x73, 0x04, 0xc1, 0x1c, 0x01, 0x28, 0x00, 0x00, 0x00,
+  0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79,
+  0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e,
+  0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07,
+  0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
+  0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07,
+  0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+  0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x84, 0x90, 0x21, 0x23,
+  0x45, 0x44, 0x00, 0xca, 0x00, 0x80, 0x29, 0x03, 0x00, 0xa6, 0x0c, 0x00,
+  0x98, 0x28, 0x00, 0x00, 0xea, 0xf0, 0x06, 0x83, 0x21, 0x4f, 0x03, 0x04,
+  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x9e, 0x07,
+  0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c,
+  0x0f, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+  0x79, 0x2a, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x18, 0xf2, 0x60, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x30, 0xe4, 0xd9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x60, 0xc8, 0xd3, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0xc0, 0x90, 0x07, 0x0c, 0x80, 0x00, 0x18, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x06, 0x40, 0x00, 0x0c,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x29, 0x03, 0x20,
+  0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0xa0,
+  0x01, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+  0x79, 0xd4, 0x00, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x86, 0x3c, 0x6c, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x59, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
+  0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+  0xc6, 0x04, 0x43, 0x22, 0x4a, 0xa0, 0x20, 0x46, 0x00, 0x8a, 0xa1, 0x40,
+  0x0a, 0xa1, 0x08, 0x4a, 0xa2, 0x40, 0x05, 0x0a, 0x56, 0xa0, 0x0c, 0xca,
+  0xa1, 0x34, 0x0a, 0x34, 0xa0, 0x50, 0x05, 0x4a, 0xa1, 0x30, 0xca, 0x9c,
+  0x39, 0xa0, 0xcc, 0x81, 0x03, 0x8a, 0xad, 0x70, 0x09, 0x88, 0x2e, 0x41,
+  0xc0, 0x40, 0x40, 0x20, 0x9a, 0x6b, 0x60, 0x04, 0x80, 0x60, 0xdb, 0x41,
+  0x80, 0x64, 0xdb, 0x01, 0xc0, 0x76, 0x08, 0xa0, 0x69, 0x06, 0x80, 0x94,
+  0x11, 0x00, 0x42, 0x66, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+  0xce, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44,
+  0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45,
+  0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04, 0x45, 0x66, 0x26, 0x27,
+  0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x08,
+  0x69, 0x82, 0x40, 0x4c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x10, 0xd4, 0x06,
+  0xc1, 0x30, 0x38, 0xb0, 0xa5, 0x89, 0x4d, 0x10, 0x88, 0x6a, 0xc3, 0x80,
+  0x24, 0xc4, 0x04, 0x01, 0x0e, 0xd4, 0x80, 0x04, 0x15, 0x53, 0xd0, 0xd4,
+  0x04, 0x81, 0xb0, 0x26, 0x08, 0xc4, 0xb5, 0x41, 0x30, 0x9c, 0x0d, 0x89,
+  0xb1, 0x30, 0x86, 0x31, 0x34, 0xc6, 0xb3, 0x21, 0x80, 0x26, 0x08, 0x72,
+  0xb0, 0x06, 0x3c, 0xce, 0x9e, 0xea, 0xe8, 0xe0, 0xea, 0xe8, 0x26, 0x08,
+  0x04, 0x36, 0x41, 0x98, 0x83, 0x34, 0x98, 0x20, 0x10, 0xd9, 0x06, 0xc1,
+  0xb0, 0x36, 0x2c, 0x86, 0x34, 0x19, 0xc6, 0x40, 0x55, 0x55, 0x75, 0x4d,
+  0x10, 0xe4, 0x80, 0x0d, 0xa8, 0x9c, 0xd5, 0xa5, 0x51, 0x95, 0xe1, 0xd1,
+  0xd5, 0xc9, 0x95, 0x6d, 0x58, 0x86, 0x4c, 0x33, 0x86, 0x81, 0xaa, 0xaa,
+  0xea, 0xda, 0x20, 0x60, 0xdb, 0x04, 0x21, 0x19, 0x58, 0x49, 0x85, 0xe5,
+  0x1d, 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x4d, 0x95,
+  0xd1, 0xd1, 0xa5, 0xb9, 0x9d, 0xcd, 0x4d, 0x10, 0x08, 0x6d, 0x03, 0x62,
+  0x74, 0x9e, 0x61, 0x0c, 0x1f, 0xb0, 0x21, 0x00, 0x83, 0x0d, 0x44, 0xc4,
+  0x85, 0x01, 0x30, 0x41, 0x98, 0xda, 0x60, 0x82, 0x40, 0x6c, 0x2c, 0xc6,
+  0xde, 0xd8, 0xde, 0xe4, 0x26, 0x08, 0x04, 0x37, 0x41, 0x20, 0xba, 0x09,
+  0x02, 0xe1, 0x6d, 0x40, 0x92, 0x32, 0x30, 0x03, 0xe3, 0x0c, 0x2c, 0x34,
+  0x70, 0x88, 0x90, 0xa5, 0xcd, 0xd1, 0x85, 0xb9, 0x8d, 0x95, 0x4d, 0x10,
+  0x88, 0x6f, 0x83, 0x91, 0xa8, 0x81, 0x19, 0xac, 0xc1, 0x19, 0x58, 0x44,
+  0xd0, 0xd2, 0xe8, 0x86, 0xde, 0xea, 0xdc, 0xe8, 0x26, 0x08, 0x04, 0x18,
+  0x4c, 0x10, 0x88, 0x30, 0xd8, 0x60, 0x24, 0x6d, 0x60, 0x06, 0x6e, 0x70,
+  0x06, 0x6f, 0xb0, 0x81, 0x20, 0x83, 0x34, 0x60, 0x03, 0x38, 0x98, 0x20,
+  0x20, 0x6f, 0xc0, 0x44, 0xae, 0xcc, 0x8d, 0xac, 0x4c, 0xee, 0xa8, 0x2e,
+  0x6d, 0x82, 0x30, 0x07, 0x68, 0xb0, 0x01, 0x49, 0xe6, 0xc0, 0x0c, 0x8c,
+  0x33, 0x70, 0x2c, 0x3a, 0xe0, 0x51, 0x37, 0x57, 0x26, 0x15, 0x96, 0x37,
+  0xb7, 0x01, 0x49, 0xec, 0xc0, 0x0c, 0x9c, 0x33, 0x70, 0x2c, 0x3a, 0xe0,
+  0xd2, 0x96, 0xe6, 0x46, 0x94, 0x36, 0x47, 0x17, 0xe6, 0x36, 0x56, 0xb6,
+  0x01, 0x49, 0xf0, 0xc0, 0x0c, 0x88, 0x33, 0xb0, 0x2c, 0x3a, 0xe0, 0xd2,
+  0x16, 0x86, 0x47, 0x94, 0x36, 0x47, 0x17, 0xe6, 0x36, 0x56, 0x36, 0x41,
+  0x20, 0xc4, 0x60, 0x03, 0x92, 0xe8, 0x81, 0x19, 0xec, 0xc1, 0x19, 0x58,
+  0x16, 0x1d, 0x70, 0x49, 0x73, 0xb3, 0x2b, 0x93, 0x9b, 0x2b, 0xb3, 0x4a,
+  0x2b, 0xbb, 0xdb, 0x30, 0x38, 0xce, 0xb0, 0x41, 0x49, 0xfa, 0x80, 0xf2,
+  0x03, 0x33, 0x68, 0xce, 0xc0, 0xb2, 0xe8, 0x80, 0x51, 0x9a, 0x9b, 0x5d,
+  0x99, 0xdc, 0x5c, 0x19, 0x94, 0xdc, 0x9b, 0x5a, 0xd9, 0x18, 0x5d, 0xda,
+  0x9b, 0xdb, 0x06, 0x25, 0x01, 0x05, 0xca, 0x0f, 0xcc, 0x60, 0x0d, 0xce,
+  0xc0, 0xb2, 0xe8, 0x60, 0xc3, 0xf1, 0xd5, 0xc1, 0x1d, 0xe4, 0x01, 0x1f,
+  0xfc, 0x41, 0x28, 0x6c, 0x28, 0x8c, 0x31, 0x88, 0x03, 0x39, 0x10, 0x85,
+  0x09, 0x82, 0x53, 0x6c, 0x00, 0x36, 0x0c, 0x43, 0x29, 0x94, 0xc2, 0x86,
+  0xc0, 0x14, 0x36, 0x0c, 0x03, 0x29, 0x9c, 0xc2, 0x04, 0x81, 0x18, 0x83,
+  0x0d, 0x82, 0x91, 0x0a, 0x13, 0x04, 0x82, 0x0c, 0x36, 0x08, 0xc6, 0x2a,
+  0x6c, 0x18, 0x54, 0x81, 0x15, 0x54, 0x61, 0xc3, 0x60, 0x8c, 0x41, 0x2b,
+  0x10, 0x98, 0x20, 0xd0, 0xc1, 0x19, 0x6c, 0x10, 0x0c, 0x58, 0xd8, 0x50,
+  0x00, 0xaf, 0x00, 0x88, 0x41, 0x2c, 0xf0, 0x09, 0xf8, 0x91, 0x0a, 0xcb,
+  0x3b, 0x2a, 0x73, 0x03, 0x02, 0xca, 0x0a, 0xc2, 0xc2, 0xd2, 0xda, 0x10,
+  0x18, 0x1b, 0x08, 0xe2, 0x0c, 0xde, 0x80, 0x16, 0x36, 0x14, 0xa4, 0x30,
+  0x0b, 0x00, 0x50, 0x0b, 0x44, 0xc4, 0xe4, 0xc2, 0xdc, 0xc6, 0xd0, 0xca,
+  0xe6, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0x4d, 0x10, 0x88, 0x32,
+  0x60, 0x91, 0xe6, 0x36, 0x47, 0x37, 0x37, 0x41, 0x20, 0xcc, 0x80, 0x44,
+  0x9a, 0x1b, 0xdd, 0x1c, 0x11, 0xba, 0x32, 0xbc, 0x2f, 0xb6, 0xb7, 0x30,
+  0x32, 0x26, 0x74, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1b,
+  0x98, 0x5b, 0x70, 0x70, 0x21, 0x17, 0x74, 0x61, 0x17, 0x78, 0xc1, 0xea,
+  0x85, 0xc1, 0x17, 0x86, 0x2a, 0x6c, 0x6c, 0x76, 0x6d, 0x2e, 0x69, 0x64,
+  0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19, 0x9e, 0x8b, 0x5d, 0x99,
+  0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68, 0x42, 0x86, 0xe7, 0x62,
+  0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x30, 0xea, 0x90, 0xe1, 0xb9,
+  0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd, 0x91, 0x95, 0xb1, 0x4d,
+  0x09, 0x92, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
+  0x63, 0x65, 0x73, 0x53, 0x82, 0x30, 0xa8, 0x44, 0x86, 0xe7, 0x42, 0x97,
+  0x07, 0x57, 0x16, 0xe4, 0xe6, 0xf6, 0x46, 0x17, 0x46, 0x97, 0xf6, 0xe6,
+  0x36, 0x37, 0x45, 0x10, 0x85, 0x53, 0x28, 0x46, 0x86, 0xe7, 0x42, 0x86,
+  0x27, 0x07, 0x15, 0x96, 0xc7, 0xf6, 0x16, 0x46, 0x16, 0xe4, 0xe6, 0xf6,
+  0x46, 0x17, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x37, 0x25, 0x68, 0x85, 0x3a,
+  0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e,
+  0x74, 0x73, 0x53, 0x84, 0x58, 0xa8, 0x85, 0x2e, 0x64, 0x78, 0x2e, 0x63,
+  0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x53, 0x02, 0x5f, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+  0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+  0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+  0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+  0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+  0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+  0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+  0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+  0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+  0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+  0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+  0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+  0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+  0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+  0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+  0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+  0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+  0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+  0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+  0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+  0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+  0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+  0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70,
+  0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60,
+  0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4,
+  0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x30, 0x83, 0x81,
+  0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d,
+  0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+  0x75, 0x00, 0x00, 0x00, 0x55, 0xf0, 0x04, 0x7e, 0xd2, 0x70, 0xfe, 0x58,
+  0x76, 0x03, 0x81, 0xd9, 0x20, 0x16, 0xab, 0x2d, 0x01, 0x36, 0x08, 0xfc,
+  0xa8, 0xcc, 0xe0, 0x14, 0x08, 0x9c, 0x55, 0xa5, 0xe1, 0x3c, 0x5d, 0x1e,
+  0x1e, 0xa7, 0xdd, 0xe7, 0xe0, 0x78, 0x5c, 0x66, 0x97, 0xe5, 0x61, 0x7a,
+  0xfa, 0xed, 0x9e, 0xd2, 0xe5, 0xf5, 0x31, 0xbd, 0x2e, 0x2f, 0x03, 0x81,
+  0xc1, 0x02, 0x70, 0x83, 0xc0, 0xef, 0xfc, 0xac, 0xd3, 0xe1, 0x75, 0x3a,
+  0x10, 0x38, 0xb3, 0xfe, 0x48, 0xd2, 0x2b, 0xb5, 0x8c, 0xa7, 0xd7, 0xe5,
+  0x65, 0x19, 0x11, 0x68, 0xfd, 0x91, 0xec, 0xe5, 0x31, 0xfd, 0x2d, 0x07,
+  0x36, 0x49, 0xb0, 0x19, 0x10, 0x08, 0x04, 0x06, 0x2b, 0x20, 0x0e, 0x02,
+  0xbf, 0x73, 0x3d, 0x4d, 0x2d, 0xe3, 0xe9, 0x75, 0x79, 0x19, 0x08, 0x9c,
+  0x59, 0x7f, 0x24, 0xe9, 0x95, 0x5a, 0xc6, 0xd3, 0xeb, 0xf2, 0xb2, 0x8c,
+  0x08, 0xb4, 0xfe, 0x48, 0xf6, 0xf2, 0x98, 0xfe, 0x96, 0x03, 0x9b, 0x24,
+  0xd8, 0x0c, 0x08, 0x04, 0x02, 0x83, 0x36, 0xc0, 0xad, 0x00, 0x06, 0x12,
+  0x0d, 0x11, 0x01, 0x13, 0xe2, 0x34, 0x2c, 0x31, 0x4d, 0x48, 0x63, 0x48,
+  0xff, 0x42, 0x18, 0x80, 0x80, 0x19, 0x01, 0x33, 0x5c, 0x7e, 0xe3, 0x4c,
+  0x07, 0xd2, 0x18, 0x3e, 0x60, 0x0f, 0xd4, 0x70, 0xf9, 0xce, 0xe3, 0x03,
+  0x4d, 0xe3, 0x4c, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x84, 0x31, 0x6c,
+  0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x04, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00,
+  0x43, 0x49, 0x18, 0x80, 0x80, 0xf9, 0xc5, 0x6d, 0x5b, 0xc3, 0x36, 0x5c,
+  0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94,
+  0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x41, 0xa0, 0xc1, 0x70, 0xf9,
+  0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x7c,
+  0x4e, 0x54, 0x22, 0x81, 0x3f, 0x5c, 0xfe, 0x84, 0x3d, 0x84, 0xe4, 0x87,
+  0x40, 0x33, 0x2c, 0x84, 0x45, 0xe4, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b,
+  0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x7c, 0x4e, 0x54, 0x22,
+  0x81, 0x7f, 0x38, 0xd2, 0xb4, 0x00, 0x98, 0x43, 0x4d, 0xfe, 0x0a, 0x60,
+  0x20, 0xd1, 0x10, 0x11, 0x30, 0x21, 0x4e, 0xc3, 0x12, 0xd3, 0x84, 0x34,
+  0x86, 0x64, 0x07, 0x60, 0x30, 0x5c, 0xbe, 0xf3, 0xf8, 0x03, 0x22, 0x3d,
+  0xc0, 0x24, 0x1c, 0x2b, 0x80, 0x49, 0x1d, 0xc2, 0x10, 0x8d, 0x84, 0x38,
+  0x8d, 0xe4, 0x23, 0xb7, 0x6d, 0x06, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0f,
+  0x88, 0xf4, 0x00, 0x93, 0x70, 0xac, 0x00, 0x26, 0x89, 0xcd, 0x40, 0x5c,
+  0x3e, 0x72, 0xdb, 0x96, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x41, 0x4c,
+  0x1d, 0xc2, 0x10, 0x8d, 0x84, 0x38, 0x8d, 0x64, 0x0e, 0xd2, 0x70, 0xf9,
+  0xce, 0xe3, 0x4f, 0x44, 0x34, 0x21, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x9b,
+  0x42, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, 0x94,
+  0x0e, 0x30, 0xf8, 0xc5, 0x6d, 0xdb, 0x82, 0x35, 0x5c, 0xbe, 0xf3, 0xf8,
+  0x13, 0x71, 0x4d, 0x54, 0x44, 0xb0, 0x93, 0x13, 0x11, 0x7e, 0x71, 0xdb,
+  0x86, 0xd0, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0x14, 0x01, 0x02, 0xb1, 0x02,
+  0x98, 0x2f, 0x4d, 0x11, 0x25, 0x4c, 0x7e, 0x88, 0x4c, 0x62, 0x53, 0x38,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4c, 0x44, 0x4e,
+  0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x78, 0x36, 0x34, 0x5c,
+  0x44, 0x65, 0x62, 0x75, 0x67, 0x5c, 0x44, 0x58, 0x31, 0x32, 0x44, 0x65,
+  0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x61, 0x79, 0x47, 0x65, 0x6e, 0x53,
+  0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x64, 0x62, 0x00, 0x00, 0x00,
+  0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x88, 0x54, 0x7d, 0x06, 0x51, 0x36, 0x08, 0xba, 0x90, 0xf1, 0x00, 0xb9,
+  0x9a, 0xd6, 0xd2, 0x20, 0x44, 0x58, 0x49, 0x4c, 0x60, 0x10, 0x00, 0x00,
+  0x68, 0x00, 0x06, 0x00, 0x18, 0x04, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c,
+  0x08, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x10, 0x00, 0x00,
+  0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00,
+  0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
+  0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
+  0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14,
+  0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20,
+  0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90,
+  0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a,
+  0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x1b, 0x88, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0xda, 0x60, 0x08,
+  0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x40, 0x6d, 0x30, 0x86, 0xff,
+  0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06,
+  0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00,
+  0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84,
+  0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c,
+  0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xf4, 0xc1, 0x1c, 0x01, 0x42, 0xc0, 0x3d,
+  0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x7e, 0x08, 0x34, 0xc3, 0x42, 0xa0,
+  0x20, 0x20, 0x61, 0x8e, 0x00, 0x0c, 0x66, 0x00, 0x86, 0x11, 0x88, 0x22,
+  0x09, 0x8c, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2,
+  0x57, 0x00, 0x03, 0x89, 0x86, 0x88, 0x80, 0x09, 0x71, 0x1a, 0x96, 0x98,
+  0x26, 0xa4, 0x31, 0x24, 0x64, 0x10, 0x44, 0x51, 0x1c, 0x07, 0x21, 0x19,
+  0x40, 0x90, 0x32, 0x02, 0x50, 0x02, 0x86, 0x9a, 0x32, 0x10, 0x04, 0x40,
+  0x4f, 0x16, 0x18, 0x59, 0x50, 0x9c, 0x23, 0x4d, 0x11, 0x25, 0x4c, 0x7e,
+  0x88, 0x4c, 0x62, 0x53, 0x38, 0x68, 0x88, 0x24, 0x82, 0xa6, 0x12, 0x31,
+  0x84, 0x40, 0x10, 0x04, 0x41, 0x14, 0x45, 0x51, 0x14, 0x45, 0x51, 0x50,
+  0x54, 0xdd, 0x34, 0x5c, 0xfe, 0x84, 0x3d, 0x84, 0xe4, 0x77, 0x08, 0x43,
+  0x34, 0x12, 0xe2, 0x34, 0x12, 0x22, 0x08, 0x82, 0x20, 0x0a, 0x71, 0x11,
+  0x02, 0x41, 0xd8, 0x4d, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0xfe, 0x4a,
+  0x48, 0x2b, 0x31, 0xf9, 0xc5, 0x6d, 0xa3, 0xa2, 0x28, 0x8a, 0x82, 0x28,
+  0x8a, 0x46, 0x08, 0x04, 0x41, 0x10, 0x04, 0x41, 0xd0, 0x56, 0x16, 0x86,
+  0x10, 0x08, 0x82, 0x28, 0x8a, 0xa2, 0x00, 0xa8, 0x3b, 0x6a, 0xb8, 0xfc,
+  0x09, 0x7b, 0x08, 0xc9, 0xe7, 0x36, 0xaa, 0x58, 0x89, 0xc9, 0x2f, 0x6e,
+  0x1b, 0x11, 0x45, 0x51, 0x14, 0x85, 0xf8, 0x08, 0x81, 0x20, 0xf0, 0xa8,
+  0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x9f, 0xdb, 0xa8, 0x62, 0x25, 0x26,
+  0x1f, 0xb9, 0x6d, 0x44, 0x10, 0x04, 0x41, 0x14, 0x42, 0x24, 0x04, 0x82,
+  0xc6, 0x52, 0x14, 0x44, 0x51, 0x14, 0x54, 0xde, 0x36, 0x5c, 0xfe, 0x84,
+  0x3d, 0x84, 0xe4, 0xaf, 0x84, 0xe4, 0x50, 0x91, 0x40, 0xa4, 0x91, 0xf3,
+  0x10, 0xd1, 0x84, 0x10, 0x12, 0x12, 0x08, 0xa2, 0x10, 0x02, 0x21, 0x9c,
+  0x84, 0x96, 0x41, 0x20, 0x04, 0x52, 0xcb, 0x20, 0x10, 0x08, 0xb1, 0x03,
+  0x01, 0x67, 0x06, 0xd2, 0x14, 0x51, 0xc2, 0xe4, 0xaf, 0x00, 0x36, 0x45,
+  0x80, 0x80, 0x34, 0x86, 0x26, 0x08, 0xc4, 0x42, 0x44, 0xc0, 0x84, 0x38,
+  0x0d, 0x3b, 0x45, 0x94, 0x30, 0x51, 0x11, 0x81, 0x02, 0x82, 0xde, 0x99,
+  0xc8, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, 0x61, 0x1e, 0xdc, 0x40, 0x16,
+  0x6e, 0x81, 0x16, 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c,
+  0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d,
+  0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x81, 0x0d,
+  0xc0, 0x80, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, 0x00, 0x05, 0x06, 0xc5, 0x73,
+  0x04, 0xc1, 0x1c, 0x01, 0x28, 0x0c, 0x23, 0x0c, 0xc5, 0x39, 0xd2, 0x14,
+  0x51, 0xc2, 0xe4, 0xaf, 0x00, 0xd6, 0x11, 0x92, 0x80, 0x88, 0xba, 0xa8,
+  0x0b, 0xb2, 0x89, 0x98, 0x02, 0xa0, 0x9a, 0x0a, 0x32, 0x00, 0x00, 0x00,
+  0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79,
+  0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e,
+  0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07,
+  0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e,
+  0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07,
+  0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07,
+  0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+  0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07,
+  0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x3a, 0x0f, 0x84, 0x90, 0x21, 0x23,
+  0x45, 0x44, 0x00, 0xca, 0x00, 0x80, 0x29, 0x03, 0x00, 0xa6, 0x0c, 0x00,
+  0x98, 0x28, 0x00, 0x00, 0xea, 0x60, 0x06, 0x83, 0x21, 0x4f, 0x03, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x9e, 0x07,
+  0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c,
+  0x0f, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+  0x79, 0x2a, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x18, 0xf2, 0x60, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x30, 0xe4, 0xd9, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x60, 0xc8, 0xd3, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0xc0, 0x90, 0x07, 0x0c, 0x80, 0x00, 0x18, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x33, 0x06, 0x40, 0x00, 0x0c,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x29, 0x03, 0x20,
+  0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0xa0,
+  0x01, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
+  0x79, 0xd4, 0x00, 0x08, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x86, 0x3c, 0x6c, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x59, 0x20, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+  0xc6, 0x04, 0x43, 0x22, 0x4a, 0xa0, 0x20, 0x8a, 0x61, 0x04, 0xa0, 0x40,
+  0x0a, 0xa1, 0x08, 0x4a, 0xa2, 0x40, 0x05, 0xca, 0x9c, 0x39, 0xa0, 0xcc,
+  0x81, 0x03, 0xca, 0xa1, 0x14, 0x88, 0x2e, 0x41, 0xc0, 0x40, 0x40, 0x20,
+  0x9a, 0x47, 0x00, 0x08, 0xb6, 0x1d, 0x04, 0x48, 0xb6, 0x1d, 0x00, 0x6c,
+  0x87, 0x00, 0x9a, 0x66, 0x00, 0x48, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90,
+  0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24,
+  0xc6, 0x05, 0xc7, 0x45, 0xa6, 0x06, 0x46, 0xc6, 0x25, 0x26, 0x06, 0x04,
+  0x45, 0x66, 0x26, 0x27, 0x47, 0x26, 0xa6, 0x46, 0x46, 0x26, 0x65, 0x43,
+  0x10, 0x4c, 0x10, 0x08, 0x69, 0x82, 0x40, 0x4c, 0x1b, 0x84, 0x81, 0xe0,
+  0xc0, 0x96, 0x26, 0x36, 0x41, 0x20, 0xa8, 0x0d, 0x83, 0x71, 0x10, 0x13,
+  0x04, 0xa2, 0x9a, 0x20, 0xc0, 0x41, 0x18, 0x90, 0xa0, 0x62, 0x0a, 0x9a,
+  0x9a, 0x20, 0x10, 0xd6, 0x04, 0x81, 0xb8, 0x36, 0x08, 0x49, 0xb3, 0x21,
+  0x49, 0x94, 0x25, 0x49, 0x06, 0x26, 0x71, 0x36, 0x04, 0xcf, 0x04, 0x41,
+  0x0e, 0xc4, 0x80, 0xc7, 0xd9, 0x53, 0x1d, 0x1d, 0x5c, 0x1d, 0xdd, 0x04,
+  0x81, 0xc0, 0x26, 0x08, 0x73, 0x00, 0x06, 0x13, 0x04, 0x22, 0xdb, 0x20,
+  0x24, 0xd5, 0x86, 0x25, 0x89, 0xa4, 0x24, 0x19, 0x26, 0x8a, 0xa2, 0xac,
+  0x09, 0x82, 0x1c, 0x8c, 0x01, 0x95, 0xb3, 0xba, 0x34, 0xaa, 0x32, 0x3c,
+  0xba, 0x3a, 0xb9, 0xb2, 0x0d, 0xcb, 0x80, 0x65, 0xc9, 0x30, 0x4c, 0x14,
+  0x45, 0x59, 0x1b, 0x84, 0x4b, 0x9b, 0x20, 0x24, 0x03, 0x2b, 0xa9, 0xb0,
+  0xbc, 0xa3, 0x32, 0xb7, 0x32, 0xb9, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xa9,
+  0x32, 0x3a, 0xba, 0x34, 0xb7, 0xb3, 0xb9, 0x09, 0x02, 0xa1, 0x6d, 0x40,
+  0x12, 0xae, 0x4b, 0x92, 0xc1, 0x03, 0x36, 0x04, 0xdf, 0x06, 0x02, 0xda,
+  0xc0, 0x00, 0x98, 0x20, 0x38, 0xc5, 0x06, 0x60, 0xc3, 0x30, 0x8c, 0xc1,
+  0x18, 0x6c, 0x08, 0xc8, 0x60, 0xc3, 0x30, 0x88, 0x41, 0x19, 0x4c, 0x10,
+  0x26, 0x32, 0x98, 0x20, 0x10, 0xdb, 0x06, 0x21, 0x41, 0x83, 0x09, 0x02,
+  0xc1, 0x6d, 0x10, 0x12, 0x35, 0xd8, 0x30, 0xa4, 0xc1, 0x1a, 0xa4, 0xc1,
+  0x86, 0x21, 0x39, 0x03, 0x36, 0x20, 0x30, 0x41, 0xa0, 0x83, 0x6f, 0x83,
+  0x90, 0xbc, 0xc1, 0x86, 0x02, 0x70, 0x03, 0x20, 0x0c, 0xe0, 0x80, 0x4f,
+  0xc0, 0x8f, 0x54, 0x58, 0xde, 0x51, 0x99, 0x1b, 0x10, 0x50, 0x56, 0x10,
+  0x16, 0x96, 0xd6, 0x04, 0x81, 0xe8, 0x26, 0x08, 0x84, 0xb7, 0x21, 0x48,
+  0x36, 0x10, 0xc4, 0x1c, 0xd0, 0x41, 0x1d, 0x6c, 0x28, 0xc4, 0x40, 0x0e,
+  0x00, 0xc0, 0x0e, 0xaa, 0xb0, 0xb1, 0xd9, 0xb5, 0xb9, 0xa4, 0x91, 0x95,
+  0xb9, 0xd1, 0x4d, 0x09, 0x82, 0x2a, 0x64, 0x78, 0x2e, 0x76, 0x65, 0x72,
+  0x73, 0x69, 0x6f, 0x6e, 0x53, 0x02, 0xa2, 0x09, 0x19, 0x9e, 0x8b, 0x5d,
+  0x18, 0x9b, 0x5d, 0x99, 0xdc, 0x94, 0x80, 0xa8, 0x43, 0x86, 0xe7, 0x32,
+  0x87, 0x16, 0x46, 0x56, 0x26, 0xd7, 0xf4, 0x46, 0x56, 0xc6, 0x36, 0x25,
+  0x38, 0xca, 0x90, 0xe1, 0xb9, 0xc8, 0x95, 0xcd, 0xbd, 0xd5, 0xc9, 0x8d,
+  0x95, 0xcd, 0x4d, 0x09, 0xc0, 0xa0, 0x12, 0x19, 0x9e, 0x0b, 0x5d, 0x1e,
+  0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18, 0x5d, 0xda, 0x9b, 0xdb,
+  0xdc, 0x94, 0xa0, 0x0c, 0x8a, 0x91, 0xe1, 0xb9, 0x90, 0xe1, 0xc9, 0x41,
+  0x85, 0xe5, 0xb1, 0xbd, 0x85, 0x91, 0x05, 0xb9, 0xb9, 0xbd, 0xd1, 0x85,
+  0xd1, 0xa5, 0xbd, 0xb9, 0xcd, 0x4d, 0x09, 0xd8, 0xa0, 0x0e, 0x19, 0x9e,
+  0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc,
+  0x14, 0x01, 0x0e, 0xec, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
+  0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
+  0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
+  0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
+  0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
+  0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
+  0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
+  0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
+  0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
+  0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
+  0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
+  0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
+  0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
+  0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
+  0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
+  0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
+  0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
+  0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
+  0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
+  0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
+  0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
+  0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
+  0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87,
+  0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87,
+  0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40,
+  0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x30, 0x83, 0x81, 0xc8, 0x01, 0x1f, 0xdc,
+  0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, 0xdc, 0x40, 0x1c, 0xe4,
+  0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
+  0x55, 0xf0, 0x04, 0x7e, 0xd2, 0x70, 0xfe, 0x58, 0x76, 0x03, 0x81, 0xd9,
+  0x20, 0x16, 0xab, 0x2d, 0x01, 0x36, 0x08, 0xfc, 0xa8, 0xcc, 0xe0, 0x14,
+  0x08, 0x9c, 0x55, 0xa5, 0xe1, 0x3c, 0x5d, 0x1e, 0x1e, 0xa7, 0xdd, 0xe7,
+  0xe0, 0x78, 0x5c, 0x66, 0x97, 0xe5, 0x61, 0x7a, 0xfa, 0xed, 0x9e, 0xd2,
+  0xe5, 0xf5, 0x31, 0xbd, 0x2e, 0x2f, 0x03, 0x81, 0xc1, 0x02, 0x70, 0x83,
+  0xc0, 0xef, 0xfc, 0xac, 0xd3, 0xe1, 0x75, 0x3a, 0x10, 0x38, 0xb3, 0xfe,
+  0x48, 0xd2, 0x2b, 0xb5, 0x8c, 0xa7, 0xd7, 0xe5, 0x65, 0x19, 0x11, 0x68,
+  0xfd, 0x91, 0xec, 0xe5, 0x31, 0xfd, 0x2d, 0x07, 0x36, 0x49, 0xb0, 0x19,
+  0x10, 0x08, 0x04, 0x06, 0x2b, 0x20, 0x0e, 0x02, 0xbf, 0x73, 0x3d, 0x4d,
+  0x2d, 0xe3, 0xe9, 0x75, 0x79, 0x19, 0x08, 0x9c, 0x59, 0x7f, 0x24, 0xe9,
+  0x95, 0x5a, 0xc6, 0xd3, 0xeb, 0xf2, 0xb2, 0x8c, 0x08, 0xb4, 0xfe, 0x48,
+  0xf6, 0xf2, 0x98, 0xfe, 0x96, 0x03, 0x9b, 0x24, 0xd8, 0x0c, 0x08, 0x04,
+  0x02, 0x83, 0x36, 0xc0, 0xad, 0x00, 0x06, 0x12, 0x0d, 0x11, 0x01, 0x13,
+  0xe2, 0x34, 0x2c, 0x31, 0x4d, 0x48, 0x63, 0x48, 0xff, 0x42, 0x18, 0x80,
+  0x80, 0x19, 0x01, 0x33, 0x5c, 0x7e, 0xe3, 0x4c, 0x07, 0xd2, 0x18, 0x3e,
+  0x60, 0x0f, 0xd4, 0x70, 0xf9, 0xce, 0xe3, 0x03, 0x4d, 0xe3, 0x4c, 0xc0,
+  0x44, 0x84, 0x40, 0x33, 0x2c, 0x84, 0x31, 0x6c, 0xc3, 0xe5, 0x3b, 0x8f,
+  0x2f, 0x04, 0x54, 0x51, 0x10, 0x51, 0xe9, 0x00, 0x43, 0x49, 0x18, 0x80,
+  0x80, 0xf9, 0xc5, 0x6d, 0x5b, 0xc3, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42,
+  0x40, 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98,
+  0x8f, 0xdc, 0xb6, 0x41, 0xa0, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11,
+  0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x7c, 0x4e, 0x54, 0x22, 0x81,
+  0x3f, 0x5c, 0xfe, 0x84, 0x3d, 0x84, 0xe4, 0x87, 0x40, 0x33, 0x2c, 0x84,
+  0x45, 0xe4, 0xc1, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44,
+  0x08, 0x34, 0xc3, 0x42, 0x7c, 0x4e, 0x54, 0x22, 0x81, 0x7f, 0x38, 0xd2,
+  0xb4, 0x00, 0x98, 0x43, 0x4d, 0xfe, 0x0a, 0x60, 0x20, 0xd1, 0x10, 0x11,
+  0x30, 0x21, 0x4e, 0xc3, 0x12, 0xd3, 0x84, 0x34, 0x86, 0x64, 0x07, 0x60,
+  0x30, 0x5c, 0xbe, 0xf3, 0xf8, 0x03, 0x22, 0x3d, 0xc0, 0x24, 0x1c, 0x2b,
+  0x80, 0x49, 0x1d, 0xc2, 0x10, 0x8d, 0x84, 0x38, 0x8d, 0xe4, 0x23, 0xb7,
+  0x6d, 0x06, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0f, 0x88, 0xf4, 0x00, 0x93,
+  0x70, 0xac, 0x00, 0x26, 0x89, 0xcd, 0x40, 0x5c, 0x3e, 0x72, 0xdb, 0x96,
+  0x30, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x41, 0x4c, 0x1d, 0xc2, 0x10, 0x8d,
+  0x84, 0x38, 0x8d, 0x64, 0x0e, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0x44,
+  0x34, 0x21, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x9b, 0x42, 0x35, 0x5c, 0xbe,
+  0xf3, 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, 0x94, 0x0e, 0x30, 0xf8, 0xc5,
+  0x6d, 0xdb, 0x82, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, 0x54,
+  0x44, 0xb0, 0x93, 0x13, 0x11, 0x7e, 0x71, 0xdb, 0x86, 0xd0, 0x0d, 0x97,
+  0xef, 0x3c, 0xfe, 0x14, 0x01, 0x02, 0xb1, 0x02, 0x98, 0x2f, 0x4d, 0x11,
+  0x25, 0x4c, 0x7e, 0x88, 0x4c, 0x62, 0x53, 0x38, 0x00, 0x00, 0x00, 0x00,
+  0x61, 0x20, 0x00, 0x00, 0xcc, 0x01, 0x00, 0x00, 0x13, 0x04, 0x4a, 0x2c,
+  0x10, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x8c, 0x00, 0x94,
+  0x40, 0x79, 0x10, 0x51, 0x5c, 0x65, 0x57, 0x06, 0x05, 0x2c, 0x50, 0xb0,
+  0x03, 0x33, 0x00, 0x45, 0x2a, 0x50, 0xa2, 0x02, 0x05, 0x19, 0x50, 0x1a,
+  0xa5, 0x2b, 0x50, 0xfe, 0x03, 0x35, 0x50, 0x84, 0x40, 0x25, 0x09, 0x51,
+  0x84, 0x01, 0x65, 0x18, 0x40, 0x74, 0x11, 0x94, 0xc0, 0x08, 0x00, 0x15,
+  0x63, 0x04, 0x20, 0x08, 0x82, 0xf0, 0x37, 0x46, 0x00, 0x82, 0x20, 0x08,
+  0x82, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x08, 0x0a, 0x74, 0xce, 0x21,
+  0xd8, 0xc1, 0x1d, 0xcc, 0x21, 0xc8, 0x81, 0x36, 0x87, 0x60, 0x55, 0x54,
+  0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xbf, 0x30, 0x02, 0x30, 0x46, 0x00,
+  0x82, 0x20, 0x88, 0x7f, 0x54, 0xcf, 0x00, 0x10, 0x3e, 0xd4, 0xa1, 0x2c,
+  0x04, 0x51, 0x11, 0x15, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0a, 0x02, 0x20,
+  0x54, 0x10, 0x00, 0xa9, 0x82, 0x00, 0x08, 0x15, 0x10, 0x30, 0x13, 0x31,
+  0x11, 0xd2, 0x28, 0xcc, 0x44, 0xd8, 0x01, 0x21, 0x8d, 0xc2, 0x4c, 0x04,
+  0x41, 0x48, 0xa3, 0x30, 0x13, 0x41, 0x10, 0xd2, 0x28, 0xcc, 0x44, 0x10,
+  0x84, 0x34, 0x0a, 0x33, 0x11, 0x04, 0x21, 0x8d, 0xc2, 0x88, 0x81, 0x01,
+  0x80, 0x20, 0x18, 0xb0, 0x41, 0x28, 0x98, 0xc1, 0x31, 0x62, 0x70, 0x00,
+  0x20, 0x08, 0x06, 0x68, 0x40, 0x0a, 0x66, 0x10, 0x48, 0x7b, 0x1a, 0x90,
+  0x3f, 0xe0, 0x03, 0x72, 0x08, 0x30, 0x6c, 0x40, 0x08, 0xa1, 0x30, 0x00,
+  0xf4, 0x10, 0x60, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x1e, 0x58, 0x40,
+  0x83, 0x38, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x27, 0x16, 0xd2,
+  0x20, 0x0e, 0x48, 0x22, 0xc0, 0x0d, 0x45, 0xdd, 0x50, 0x14, 0x55, 0x04,
+  0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xe7, 0x16, 0xda, 0xe0, 0x0e,
+  0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0xc1, 0x05, 0x37, 0xb8, 0x03,
+  0xc2, 0x08, 0x40, 0x19, 0x01, 0x8e, 0x28, 0xea, 0x88, 0xa2, 0x4c, 0x30,
+  0x03, 0xf8, 0x98, 0x70, 0x06, 0xf0, 0x31, 0x61, 0xa1, 0x8f, 0x09, 0x0b,
+  0x7d, 0x08, 0x0c, 0x08, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x63,
+  0xb0, 0x0b, 0x7e, 0x50, 0xcd, 0xc2, 0x68, 0x42, 0x10, 0x0c, 0x37, 0x04,
+  0xb5, 0x10, 0x06, 0xb3, 0x0c, 0xc1, 0x11, 0x98, 0xd1, 0x06, 0xf2, 0x31,
+  0xc3, 0x0d, 0xe4, 0x63, 0x02, 0x1a, 0xc4, 0xc7, 0x84, 0x34, 0x88, 0x0f,
+  0xa1, 0x01, 0x01, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0x00, 0x0c, 0xc8,
+  0xc1, 0x14, 0x3a, 0x5f, 0x18, 0x4d, 0x08, 0x86, 0x11, 0x83, 0x03, 0x00,
+  0x41, 0x30, 0x00, 0x03, 0x73, 0x40, 0x85, 0x4f, 0x17, 0x46, 0x13, 0x82,
+  0x61, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xc0, 0x00, 0x1d, 0x54, 0x21,
+  0x0c, 0x52, 0x61, 0x34, 0x21, 0x18, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1,
+  0xa0, 0x0c, 0xd0, 0xa1, 0x15, 0x8a, 0x38, 0x90, 0x83, 0x11, 0x03, 0x04,
+  0x00, 0x41, 0x30, 0x28, 0x83, 0x74, 0x70, 0x05, 0x42, 0x0e, 0xe6, 0x60,
+  0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0xca, 0x40, 0x1d, 0x5e, 0x61, 0x98,
+  0x03, 0x3a, 0x20, 0x39, 0x20, 0xc0, 0x1c, 0x03, 0x1d, 0x10, 0xe5, 0x30,
+  0xc7, 0x10, 0x10, 0xe9, 0x30, 0xc7, 0x10, 0x10, 0xe4, 0xb0, 0xed, 0x01,
+  0x0e, 0xd0, 0x01, 0x1d, 0xe8, 0x0e, 0x08, 0x30, 0x6c, 0x40, 0x08, 0xc3,
+  0x00, 0x18, 0x28, 0x44, 0xf1, 0x19, 0x31, 0x38, 0x00, 0x10, 0x04, 0x03,
+  0x30, 0xa0, 0x07, 0x5b, 0x68, 0x03, 0x71, 0x18, 0x4d, 0x08, 0x80, 0xd1,
+  0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0xd1, 0x04, 0x62, 0x18, 0x31, 0x38,
+  0x00, 0x10, 0x04, 0x03, 0x30, 0xc8, 0x87, 0x5d, 0x90, 0x83, 0x78, 0x18,
+  0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0xd1, 0x04,
+  0x62, 0x18, 0x31, 0x38, 0x00, 0x10, 0x04, 0x03, 0x30, 0xf0, 0x07, 0x70,
+  0xb8, 0x83, 0x76, 0x18, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d,
+  0x18, 0x84, 0xd1, 0x04, 0x62, 0x30, 0x47, 0x0c, 0xe4, 0x33, 0x62, 0x80,
+  0x00, 0x20, 0x08, 0x06, 0x65, 0x20, 0x12, 0xe7, 0xe0, 0x44, 0xc1, 0x88,
+  0x01, 0x02, 0x80, 0x20, 0x18, 0x94, 0xc1, 0x48, 0xa0, 0x83, 0xe3, 0x0a,
+  0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x94, 0x01, 0x49, 0xa4, 0x83,
+  0xd3, 0x0a, 0x81, 0x35, 0x66, 0x20, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41,
+  0x30, 0x28, 0x03, 0x93, 0x58, 0x87, 0xa6, 0x0a, 0x46, 0x0c, 0x10, 0x00,
+  0x04, 0xc1, 0xa0, 0x0c, 0x4e, 0x82, 0x1d, 0x1a, 0x59, 0x08, 0x46, 0x0c,
+  0x10, 0x00, 0x04, 0xc1, 0xa0, 0x0c, 0x50, 0xa2, 0x1d, 0x9a, 0x58, 0x08,
+  0x8c, 0x51, 0x03, 0xf9, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x41, 0x19,
+  0xa8, 0xc4, 0x3b, 0x30, 0x59, 0x30, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06,
+  0x65, 0xb0, 0x12, 0xf0, 0xc0, 0xd8, 0x42, 0x30, 0x62, 0x80, 0x00, 0x20,
+  0x08, 0x06, 0x65, 0xc0, 0x12, 0xf1, 0xc0, 0xd4, 0x42, 0x40, 0xb4, 0x40,
+  0x00, 0xaa, 0x05, 0x02, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x01, 0x18,
+  0xc4, 0xc4, 0x3c, 0xa8, 0xc2, 0x4a, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82,
+  0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00,
+  0x08, 0x82, 0x01, 0x18, 0xd8, 0x04, 0x3e, 0xbc, 0x82, 0x4a, 0x8c, 0x26,
+  0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31,
+  0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x01, 0x18, 0xec, 0x44, 0x3f, 0xd0,
+  0x02, 0x3f, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c,
+  0xc2, 0x68, 0x02, 0x31, 0x98, 0xa3, 0xc9, 0x67, 0xc4, 0x00, 0x01, 0x40,
+  0x10, 0x0c, 0xca, 0xe0, 0x27, 0x48, 0xc2, 0xb9, 0x82, 0x11, 0x03, 0x04,
+  0x00, 0x41, 0x30, 0x28, 0x03, 0xb0, 0x28, 0x09, 0x87, 0x0a, 0x46, 0x0c,
+  0x10, 0x00, 0x04, 0xc1, 0xa0, 0x0c, 0xc2, 0xc2, 0x24, 0x1c, 0x75, 0x08,
+  0xac, 0xf1, 0xe4, 0x33, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x65, 0x30,
+  0x16, 0x28, 0xd1, 0x6c, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x94,
+  0x01, 0x59, 0xa4, 0x44, 0x83, 0x05, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60,
+  0x50, 0x06, 0x65, 0xa1, 0x12, 0x8d, 0x3b, 0x04, 0xc6, 0x88, 0x81, 0x7c,
+  0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0xa0, 0x0c, 0xce, 0x82, 0x25, 0x98,
+  0x2f, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x32, 0x40, 0x8b, 0x96,
+  0x60, 0xb8, 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0xca, 0x20, 0x2d,
+  0x5c, 0x82, 0x91, 0x87, 0x80, 0xe2, 0x81, 0x00, 0xdb, 0x1e, 0xd8, 0x81,
+  0x2c, 0xc8, 0x82, 0x82, 0x7a, 0x8c, 0x21, 0x04, 0x66, 0x61, 0x4d, 0x10,
+  0x9f, 0x31, 0x84, 0x61, 0x2d, 0x6c, 0x09, 0xe2, 0x33, 0x86, 0x50, 0x9c,
+  0x85, 0x25, 0x41, 0x7c, 0xe6, 0x18, 0xf6, 0xa1, 0x60, 0x8b, 0x39, 0x86,
+  0x80, 0x80, 0x8b, 0x39, 0x86, 0x60, 0x58, 0x8b, 0x6d, 0x0f, 0xf7, 0xf0,
+  0x16, 0x6c, 0x41, 0xfe, 0x40, 0x80, 0x61, 0x03, 0x42, 0x18, 0x06, 0x60,
+  0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xc0, 0x40, 0x2f, 0x78, 0x62, 0x1e,
+  0xe2, 0x62, 0x34, 0x21, 0x10, 0xb6, 0x3d, 0xec, 0xc3, 0x5c, 0xd8, 0x05,
+  0x89, 0x04, 0x01, 0x86, 0x0d, 0x08, 0x61, 0x18, 0x80, 0x11, 0x83, 0x03,
+  0x00, 0x41, 0x30, 0x00, 0x03, 0xbf, 0x00, 0x8b, 0x7b, 0xa8, 0x8b, 0xd1,
+  0x84, 0x60, 0xd8, 0xf6, 0xf0, 0x0f, 0x77, 0x11, 0x16, 0x64, 0x12, 0x04,
+  0x18, 0x36, 0x20, 0x84, 0x61, 0x00, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1,
+  0x40, 0x0d, 0xfc, 0x42, 0x2c, 0x4c, 0x62, 0xc4, 0xe0, 0x00, 0x40, 0x10,
+  0x0c, 0xd0, 0x00, 0x34, 0xc4, 0x22, 0x68, 0x89, 0x65, 0x0f, 0x23, 0xb1,
+  0x17, 0x7b, 0x41, 0x41, 0x0d, 0xc6, 0x10, 0x02, 0x9b, 0x18, 0x43, 0x10,
+  0x70, 0x62, 0x0c, 0x61, 0xd0, 0x89, 0x65, 0x0f, 0x28, 0x01, 0x1a, 0xa3,
+  0x41, 0x41, 0x01, 0x96, 0x3d, 0xa8, 0x84, 0x68, 0xfc, 0x05, 0x05, 0x35,
+  0x18, 0x43, 0x08, 0x7a, 0x62, 0x0c, 0x41, 0xf8, 0x89, 0x31, 0x84, 0x21,
+  0x2c, 0x96, 0x3d, 0xbc, 0xc4, 0x69, 0xc4, 0x05, 0x05, 0x05, 0x18, 0x31,
+  0xa0, 0x00, 0x10, 0x04, 0x83, 0xca, 0x36, 0xd6, 0xe2, 0x49, 0x0d, 0xb5,
+  0x48, 0x8d, 0xd4, 0x48, 0x0d, 0x66, 0x51, 0x90, 0x82, 0x18, 0x02, 0x99,
+  0xd8, 0xd3, 0x20, 0x13, 0xa9, 0x61, 0x1a, 0x14, 0x10, 0xa3, 0x02, 0xd7,
+  0x88, 0x3d, 0x11, 0x35, 0xc1, 0x1a, 0xac, 0x11, 0x50, 0x60, 0x8c, 0x31,
+  0x84, 0xc0, 0x35, 0xc6, 0x10, 0x04, 0xd9, 0x18, 0x43, 0x18, 0x5a, 0x83,
+  0x7e, 0x82, 0x00, 0x7b, 0x1a, 0x76, 0x42, 0x36, 0x5e, 0x83, 0x02, 0x62,
+  0x54, 0x10, 0x1b, 0x41, 0x63, 0x41, 0x80, 0xe1, 0x06, 0xc1, 0x36, 0xce,
+  0x60, 0x96, 0x41, 0x30, 0x82, 0x59, 0x82, 0x61, 0xa0, 0x82, 0x30, 0x84,
+  0x3e, 0x20, 0x06, 0x2a, 0x0a, 0x4a, 0x78, 0x03, 0x62, 0xa0, 0xa2, 0xa0,
+  0x84, 0x37, 0x20, 0x06, 0x2a, 0x0a, 0x4a, 0x78, 0x03, 0x62, 0x4f, 0x04,
+  0x59, 0xec, 0xc6, 0x6e, 0x10, 0x14, 0x18, 0x63, 0x0c, 0x21, 0xe8, 0x8d,
+  0x31, 0x04, 0x21, 0x3c, 0xc6, 0x10, 0x06, 0xde, 0xd8, 0x13, 0x91, 0x16,
+  0xe0, 0x01, 0x1e, 0x09, 0x05, 0xc6, 0x18, 0x43, 0x08, 0x58, 0x63, 0x0c,
+  0x41, 0x68, 0x8d, 0x31, 0x84, 0xc1, 0x35, 0x0c, 0x19, 0xe4, 0x63, 0xc8,
+  0x20, 0x1f, 0x43, 0x06, 0xf9, 0xec, 0x89, 0x88, 0x0b, 0xf4, 0x40, 0x8f,
+  0x88, 0x02, 0x63, 0x8c, 0x21, 0x04, 0xb4, 0x61, 0x7b, 0x11, 0xc4, 0xc7,
+  0xa8, 0x40, 0x3e, 0x46, 0x09, 0xf2, 0x31, 0x6a, 0x90, 0x8f, 0x29, 0x03,
+  0x7c, 0x4c, 0x19, 0xe0, 0x63, 0xca, 0x00, 0x1f, 0x02, 0x0d, 0x02, 0x50,
+  0x68, 0x10, 0x80, 0x44, 0x83, 0x00, 0xb3, 0x04, 0x84, 0x79, 0xb5, 0x01,
+  0x02, 0x22, 0x0d, 0x02, 0x0c, 0x37, 0x08, 0xf7, 0x71, 0x06, 0xc3, 0x0d,
+  0x41, 0x7b, 0x84, 0xc1, 0x70, 0x43, 0xe0, 0x1e, 0x61, 0x30, 0xcb, 0x30,
+  0x14, 0xc1, 0x2c, 0x81, 0x31, 0x50, 0x51, 0x58, 0x05, 0x2e, 0x04, 0x03,
+  0x15, 0x85, 0x55, 0xe0, 0x42, 0x30, 0x50, 0x51, 0x58, 0x05, 0x2e, 0x04,
+  0xb3, 0x04, 0xc7, 0x40, 0x45, 0x61, 0x18, 0x3c, 0x03, 0x0c, 0x54, 0x14,
+  0x86, 0xe1, 0x33, 0xc0, 0x40, 0x45, 0x61, 0x18, 0x60, 0x03, 0x8c, 0x18,
+  0x18, 0x00, 0x08, 0x82, 0x81, 0x1a, 0x94, 0x48, 0x7a, 0xac, 0xc6, 0x88,
+  0xc1, 0x01, 0x80, 0x20, 0x18, 0xa0, 0xc1, 0x89, 0xa4, 0x47, 0x60, 0x1b,
+  0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x80, 0xb9, 0x88, 0x79, 0x04, 0x22,
+  0x32, 0x9a, 0x10, 0x00, 0xc3, 0x06, 0xc4, 0x6a, 0x04, 0x00, 0x30, 0x9a,
+  0x20, 0x04, 0xc3, 0x06, 0xc4, 0x6a, 0x04, 0x00, 0x40, 0xac, 0x41, 0x8c,
+  0x0b, 0x8a, 0xa2, 0xd6, 0x20, 0xc6, 0x05, 0x45, 0x59, 0x5e, 0x0c, 0xf2,
+  0xb1, 0xbc, 0x10, 0xe4, 0x73, 0x02, 0x31, 0x27, 0x10, 0x43, 0xbb, 0x41,
+  0x80, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x18, 0x03, 0x1b, 0xc9, 0x0f,
+  0xd8, 0x70, 0x91, 0xd1, 0x84, 0x00, 0x18, 0x6e, 0x08, 0x60, 0x24, 0x0c,
+  0x66, 0x19, 0x90, 0x24, 0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x03, 0x35,
+  0xb0, 0x11, 0xfd, 0xe8, 0x8d, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x40,
+  0x03, 0x1c, 0xd1, 0x8f, 0xe0, 0x3c, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1,
+  0x00, 0xfb, 0x91, 0xfb, 0x08, 0x66, 0x64, 0x34, 0x21, 0x00, 0x86, 0x0d,
+  0x08, 0xdd, 0x08, 0x00, 0x60, 0x34, 0x41, 0x08, 0x86, 0x0d, 0x08, 0xdd,
+  0x08, 0x00, 0x80, 0x76, 0x83, 0x18, 0x17, 0x14, 0x45, 0xbc, 0x41, 0x8c,
+  0x0b, 0x8a, 0x32, 0xd5, 0x18, 0xe4, 0x63, 0xaa, 0x21, 0xc8, 0xe7, 0x04,
+  0x62, 0x4e, 0x20, 0x86, 0xd8, 0x83, 0x00, 0x23, 0x06, 0x06, 0x00, 0x82,
+  0x60, 0xa0, 0x06, 0x64, 0x82, 0x22, 0xeb, 0x31, 0x62, 0x70, 0x00, 0x20,
+  0x08, 0x06, 0x68, 0x60, 0x26, 0x28, 0x12, 0xd4, 0xc7, 0x88, 0x41, 0x03,
+  0x80, 0x20, 0x18, 0x6c, 0x6c, 0xe2, 0x1f, 0x01, 0x8a, 0x14, 0x04, 0x8a,
+  0xa0, 0x08, 0x8a, 0xa0, 0xc8, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1,
+  0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0x03, 0xd1, 0x07, 0x01, 0xec, 0x3e,
+  0x84, 0xf8, 0xd8, 0x1a, 0x04, 0xf2, 0xb1, 0x35, 0x10, 0xe4, 0x63, 0x6b,
+  0x30, 0xc8, 0xc7, 0x12, 0x43, 0x3e, 0x96, 0x1c, 0xf2, 0xb1, 0x04, 0x91,
+  0x8f, 0x19, 0x03, 0x7c, 0xcc, 0x18, 0xe0, 0x63, 0xc6, 0x00, 0x1f, 0xfa,
+  0x0f, 0x02, 0x10, 0x88, 0x10, 0x80, 0x42, 0x84, 0x00, 0xb3, 0x04, 0xc9,
+  0x40, 0x45, 0xc1, 0x20, 0xee, 0x70, 0x0c, 0x54, 0x14, 0x0c, 0xe2, 0x0e,
+  0xc7, 0x40, 0x45, 0xc1, 0x20, 0xee, 0x70, 0x8c, 0x18, 0x18, 0x00, 0x08,
+  0x82, 0x81, 0x1a, 0xf0, 0x09, 0x98, 0x88, 0xc8, 0x88, 0xc1, 0x01, 0x80,
+  0x20, 0x18, 0xa0, 0x81, 0x9f, 0x80, 0x49, 0xd0, 0x22, 0x23, 0x06, 0x0e,
+  0x00, 0x82, 0x60, 0xd0, 0x8d, 0x4a, 0x8d, 0x04, 0x6e, 0xd0, 0x06, 0x60,
+  0x52, 0x10, 0x43, 0x8a, 0x98, 0x09, 0x9d, 0x08, 0x01, 0x10, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00
+};

+ 38 - 13
DX12GraphicsApi.cpp

@@ -10,9 +10,10 @@
 #include "DLLRegister.h"
 #include "DX12BLASModel.h"
 #include "DX12CommandQueue.h"
-#include "DX12HitShader.h"
-#include "DX12MissShader.h"
-#include "DX12RayGenShader.h"
+#include "DX12DefaultAnyHitShader.h"
+#include "DX12DefaultHitShader.h"
+#include "DX12DefaultMissShader.h"
+#include "DX12DefaultRayGenShader.h"
 #include "DX12SamplerState.h"
 #include "DX12Shader.h"
 #include "DX12Texture.h"
@@ -27,6 +28,8 @@
 #include "Window.h"
 #include "World3D.h"
 
+#define DEFAULT_MAX_TRANSPARENT_HITS 5
+
 using namespace Framework;
 
 DirectX12::DirectX12()
@@ -180,6 +183,16 @@ void Framework::DirectX12::renderKamera(
     {
         setPipeline(new DX12Pipeline());
     }
+    for (Texture* texture : *texturRegister->zTextures())
+    {
+        if (texture->hasBufferChanged())
+        {
+            textureDescriptorHeap->updateTextureInput(texture->getId(),
+                DX12_SHADER_REGISTER_T_SHADER_RESOURCE,
+                (DX12Texture*)texture);
+            texture->setBufferChanged(0);
+        }
+    }
     directCommandQueue->zCommandList()->RSSetViewports(
         1, (D3D12_VIEWPORT*)zKamera->zViewPort());
     Mat4<float> identity = Mat4<float>::identity();
@@ -285,9 +298,8 @@ void Framework::DirectX12::initializePipeline()
 {
     if (pipeline->getShaders().getEntryCount() == 0)
     { // add default shaders
-        DX12Shader* rayGenShader
-            = new DX12Shader(DX12DefaultRayGenerationShaderBytes,
-                sizeof(DX12DefaultRayGenerationShaderBytes));
+        DX12Shader* rayGenShader = new DX12Shader(
+            DX12DefaultRayGenShaderBytes, sizeof(DX12DefaultRayGenShaderBytes));
         // RayGen from RayGen.hlsl
         DX12ShaderSignature* rayGenSignature = new DX12ShaderSignature();
         rayGenSignature->addRegisterUsageLinkedToDescriptorHeap(
@@ -310,13 +322,10 @@ void Framework::DirectX12::initializePipeline()
             "Miss", new DX12ShaderSignature(), DX12_SHADER_FUNCTION_TYPE_MISS));
         pipeline->addShader(missShader);
 
-        DX12Shader* hitShader = new DX12Shader(
-            DX12DefaultHitShaderBytes, sizeof(DX12DefaultHitShaderBytes));
-        // ClosestHit from Hit.hlsl
         DX12ShaderSignature* hitSignature = new DX12ShaderSignature();
         hitSignature->addRegisterUsageLinkedToDescriptorHeap(
             0, DX12_SHADER_REGISTER_S_SAMPLER, 0, 0, SAMPLER_DESCRIPTOR_HEAP);
-        hitSignature->addRegisterUsageLinkedToDescriptorHeap(1,
+        hitSignature->addRegisterUsageLinkedToDescriptorHeap(0,
             DX12_SHADER_REGISTER_T_SHADER_RESOURCE,
             0,
             1,
@@ -334,14 +343,28 @@ void Framework::DirectX12::initializePipeline()
         sbtPolygonSizeBufferOffset
             = hitSignature->addRegisterUsageLinkedToShaderBindingTable(
                 DX12_SHADER_REGISTER_T_SHADER_RESOURCE, 1, 5);
-        DX12ShaderFunction* closestHitFunction = new DX12ShaderFunction(
-            "ClosestHit", hitSignature, DX12_SHADER_FUNCTION_TYPE_CLOSEST_HIT);
+        DX12Shader* anyHitShader = new DX12Shader(
+            DX12DefaultAnyHitShaderBytes, sizeof(DX12DefaultAnyHitShaderBytes));
+        DX12ShaderFunction* anyHitFunction = new DX12ShaderFunction(
+            "AnyHit", hitSignature, DX12_SHADER_FUNCTION_TYPE_ANY_HIT);
+        // AnyHit from AnyHit.hlsl
+        anyHitShader->addFunction(anyHitFunction);
+        pipeline->addShader(anyHitShader);
+
+        DX12Shader* hitShader = new DX12Shader(
+            DX12DefaultHitShaderBytes, sizeof(DX12DefaultHitShaderBytes));
+        // ClosestHit from Hit.hlsl
+        DX12ShaderFunction* closestHitFunction
+            = new DX12ShaderFunction("ClosestHit",
+                dynamic_cast<DX12ShaderSignature*>(hitSignature->getThis()),
+                DX12_SHADER_FUNCTION_TYPE_CLOSEST_HIT);
         hitShader->addFunction(closestHitFunction);
         pipeline->addShader(hitShader);
 
         defaultHitGroup = new DX12ShaderHitGroup("HitGroup");
         defaultHitGroup->setAttributeSize(8);
-        defaultHitGroup->setPayloadSize(16);
+        defaultHitGroup->setPayloadSize(20 * DEFAULT_MAX_TRANSPARENT_HITS + 4);
+        defaultHitGroup->setAnyHitShaderFunction(anyHitFunction);
         defaultHitGroup->setClosestHitShaderFunction(closestHitFunction);
         pipeline->addHitGroup(defaultHitGroup);
 
@@ -370,6 +393,7 @@ void Framework::DirectX12::initializeTextureDescriptorHeap()
     {
         textureDescriptorHeap->addTextureInput(
             DX12_SHADER_REGISTER_T_SHADER_RESOURCE, tex);
+        tex->setBufferChanged(0);
     }
 
     textureDescriptorHeap->updateDescriptorHeap(device);
@@ -1013,6 +1037,7 @@ Texture* DirectX12::createOrGetTexture(
         textureDescriptorHeap->addTextureInput(
             DX12_SHADER_REGISTER_T_SHADER_RESOURCE, ret);
         textureDescriptorHeap->updateDescriptorHeap(device);
+        ret->setBufferChanged(0);
     }
     // directCommandQueue->execute();
     cs.unlock();

+ 34 - 9
DX12Shader.cpp

@@ -1323,8 +1323,8 @@ void Framework::DX12GlobalDescriptorHeap::updateDescriptorHeap(
         D3D12_DESCRIPTOR_HEAP_DESC desc = {};
         desc.NumDescriptors = registerInputs.getEntryCount();
         desc.Type = type == SAMPLER_DESCRIPTOR_HEAP
-            ? D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER :
-                  D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
+                      ? D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER
+                      : D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
         desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
         desc.NodeMask = 0;
 
@@ -1340,6 +1340,10 @@ void Framework::DX12GlobalDescriptorHeap::updateDescriptorHeap(
         DX12TLAS* zTLAS = dynamic_cast<DX12TLAS*>(input->inputResource);
         DX12Texture* zTexture
             = dynamic_cast<DX12Texture*>(input->inputResource);
+        if (zTexture && !zTexture->zResource())
+        {
+            zTexture = 0;
+        }
         DX12Buffer* zBuffer = dynamic_cast<DX12Buffer*>(input->inputResource);
         DX12SamplerState* zSampler
             = dynamic_cast<DX12SamplerState*>(input->inputResource);
@@ -1397,6 +1401,17 @@ void Framework::DX12GlobalDescriptorHeap::updateDescriptorHeap(
                         = zBuffer->getElementLength();
                     srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE;
                 }
+                else if (zSampler)
+                {
+                    Logging::error()
+                        << "Expected a texture or buffer or TLAS resource for "
+                           "register type "
+                        << input->registerType;
+                    throw std::logic_error(
+                        "Expected a texture or buffer or TLAS resource for "
+                        "register type "
+                        + std::to_string(input->registerType));
+                }
                 else
                 {
                     doNothing = 1;
@@ -1416,6 +1431,7 @@ void Framework::DX12GlobalDescriptorHeap::updateDescriptorHeap(
         case DX12_SHADER_REGISTER_U_UNORDERED_ACCESS:
             {
                 D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
+                bool doNothing = 0;
                 if (zTexture)
                 {
                     uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
@@ -1434,7 +1450,7 @@ void Framework::DX12GlobalDescriptorHeap::updateDescriptorHeap(
                     uavDesc.Buffer.CounterOffsetInBytes = 0;
                     uavDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE;
                 }
-                else
+                else if (zTLAS || zSampler)
                 {
                     Logging::error()
                         << "Expected a texture or buffer resource for "
@@ -1446,11 +1462,18 @@ void Framework::DX12GlobalDescriptorHeap::updateDescriptorHeap(
                         "type "
                         + std::to_string(input->registerType));
                 }
-                zDevice->CreateUnorderedAccessView(
-                    zTexture ? zTexture->zResource() : zBuffer->zBuffer(),
-                    0,
-                    &uavDesc,
-                    descriptorHeapHandle);
+                else
+                {
+                    doNothing = 1;
+                }
+                if (!doNothing)
+                {
+                    zDevice->CreateUnorderedAccessView(
+                        zTexture ? zTexture->zResource() : zBuffer->zBuffer(),
+                        0,
+                        &uavDesc,
+                        descriptorHeapHandle);
+                }
                 break;
             }
         case DX12_SHADER_REGISTER_S_SAMPLER:
@@ -1470,7 +1493,9 @@ void Framework::DX12GlobalDescriptorHeap::updateDescriptorHeap(
             }
         }
         descriptorHeapHandle.ptr += zDevice->GetDescriptorHandleIncrementSize(
-            D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
+            type == SAMPLER_DESCRIPTOR_HEAP
+                ? D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER
+                : D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
     }
 }
 

+ 13 - 1
DX12Texture.cpp

@@ -12,7 +12,8 @@ DX12Texture::DX12Texture(
       buffer(0),
       device(device),
       direct(direct),
-      upload(0)
+      upload(0),
+      wcName(0)
 {}
 
 DX12Texture::~DX12Texture()
@@ -21,6 +22,7 @@ DX12Texture::~DX12Texture()
     if (buffer) buffer->Release();
     if (upload) upload->Release();
 #endif
+    delete[] wcName;
 }
 
 // Updates the texture. The pixels of the current image are copied into the
@@ -56,6 +58,16 @@ bool DX12Texture::updateTextur()
             0,
             __uuidof(ID3D12Resource),
             (void**)&buffer);
+        if (!wcName)
+        {
+            wcName = new wchar_t[name.getLength() + 1];
+            mbstowcs_s(0,
+                wcName,
+                name.getLength() + 1,
+                name.getText(),
+                name.getLength() + 1);
+        }
+        buffer->SetName(wcName);
         bufferChanged = 1;
         if (getDirection() == RAM_TO_GPU)
         {

+ 1 - 0
DX12Texture.h

@@ -17,6 +17,7 @@ namespace Framework
         ID3D12Resource* upload;
         ID3D12Device* device;
         DX12DirectCommandQueue* direct;
+        wchar_t* wcName;
 
     public:
         DLLEXPORT DX12Texture(ID3D12Device* device,

+ 18 - 9
Framework.vcxproj

@@ -432,6 +432,15 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
       </ObjectFileOutput>
       <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">/T lib_6_8 %(AdditionalOptions)</AdditionalOptions>
     </None>
+    <FxCompile Include="AnyHit.hlsl">
+      <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+      </EntryPointName>
+      <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Library</ShaderType>
+      <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">6.8</ShaderModel>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)ShaderBytes</VariableName>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)Shader.h</HeaderFileOutput>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">-Fd "x64\Debug\DX12Default%(Filename)Shader.pdb" %(AdditionalOptions)</AdditionalOptions>
+    </FxCompile>
     <FxCompile Include="DX11PixelShader.hlsl">
       <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Pixel</ShaderType>
       <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType>
@@ -480,23 +489,23 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
       <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
       </EntryPointName>
       <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">6.8</ShaderModel>
-      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12HitShader.h</HeaderFileOutput>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)Shader.h</HeaderFileOutput>
       <ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
       </ObjectFileOutput>
       <FileType>Document</FileType>
       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">dxc.exe /T lib_5_0 /Zi /E"closesthit" /Od /Fh"DX12HitShader.h" /nologo "%(FullPath)"</Command>
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12HitShader.h</Outputs>
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Common.hlsl</AdditionalInputs>
-      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">-Fd "x64\Debug\DX12HitShader.pdb" %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">-Fd "x64\Debug\DX12Default%(Filename)Shader.pdb" %(AdditionalOptions)</AdditionalOptions>
       <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Library</ShaderType>
-      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12DefaultHitShaderBytes</VariableName>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)ShaderBytes</VariableName>
     </FxCompile>
     <FxCompile Include="Miss.hlsl">
       <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
       </EntryPointName>
       <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">6.8</ShaderModel>
-      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">-Fd "x64\Debug\DX12MissShader.pdb" %(AdditionalOptions)</AdditionalOptions>
-      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12MissShader.h</HeaderFileOutput>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">-Fd "x64\Debug\DX12Default%(Filename)Shader.pdb" %(AdditionalOptions)</AdditionalOptions>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)Shader.h</HeaderFileOutput>
       <ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
       </ObjectFileOutput>
       <FileType>Document</FileType>
@@ -504,14 +513,14 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12MissShader.h</Outputs>
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Common.hlsl</AdditionalInputs>
       <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Library</ShaderType>
-      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12DefaultMissShaderBytes</VariableName>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)ShaderBytes</VariableName>
     </FxCompile>
     <FxCompile Include="RayGen.hlsl">
       <EntryPointName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
       </EntryPointName>
       <ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">6.8</ShaderModel>
-      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">-Fd "x64\Debug\DX12RayGenShader.pdb" %(AdditionalOptions)</AdditionalOptions>
-      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12RayGenShader.h</HeaderFileOutput>
+      <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">-Fd "x64\Debug\DX12Default%(Filename)Shader.pdb" %(AdditionalOptions)</AdditionalOptions>
+      <HeaderFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)Shader.h</HeaderFileOutput>
       <ObjectFileOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
       </ObjectFileOutput>
       <FileType>Document</FileType>
@@ -519,7 +528,7 @@ copy "x64\Release\Framework.dll" "..\..\Spiele Platform\SMP\Fertig\x64\framework
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12RayGenShader.h</Outputs>
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Common.hlsl</AdditionalInputs>
       <ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Library</ShaderType>
-      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12DefaultRayGenerationShaderBytes</VariableName>
+      <VariableName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">DX12Default%(Filename)ShaderBytes</VariableName>
     </FxCompile>
   </ItemGroup>
   <ItemGroup>

+ 3 - 0
Framework.vcxproj.filters

@@ -737,6 +737,9 @@
     <FxCompile Include="RayGen.hlsl">
       <Filter>Framework\Graphics\DX\DX12\Shader</Filter>
     </FxCompile>
+    <FxCompile Include="AnyHit.hlsl">
+      <Filter>Framework\Graphics\DX\DX12\Shader</Filter>
+    </FxCompile>
   </ItemGroup>
   <ItemGroup>
     <None Include="ClassDiagram.cd" />

+ 1 - 15
Hit.hlsl

@@ -17,19 +17,5 @@ StructuredBuffer<int> polygonSizeBuffer : register(t1, space5);
 [shader("closesthit")]
 void ClosestHit(inout HitInfo payload, Attributes attrib)
 {
-    //payload.colorAndDistance = float4(1, 1, 1, 1.0);
-    int currentTriangle = PrimitiveIndex();
-    int textureId = 0;
-    for (int i = 0; currentTriangle >= 0; i++)
-    {
-        currentTriangle -= polygonSizeBuffer[i];
-        textureId = textureIdBuffer[i];
-    }
-    int index = PrimitiveIndex() * 3;
-    VertexData v0 = vertexData[indexBuffer[index]];
-    VertexData v1 = vertexData[indexBuffer[index + 1]];
-    VertexData v2 = vertexData[indexBuffer[index + 2]];
-    float2 texcoord = v0.texcoord * (1 - attrib.bary.x - attrib.bary.y) + v1.texcoord * attrib.bary.x + v2.texcoord * attrib.bary.y;
-    float4 color = textures[textureId].SampleLevel(gSampler, texcoord, 0);
-    payload.colorAndDistance = float4(color.rgb, RayTCurrent());
+    // TODO: reflection rays and shadow rays ...
 }

+ 5 - 1
Miss.hlsl

@@ -3,5 +3,9 @@
 [shader("miss")]
 void Miss(inout HitInfo payload : SV_RayPayload)
 {
-    payload.colorAndDistance = float4(0.2f, 0.2f, 0.2f, -1.f);
+    if (payload.hitCount < MAX_TRANSPACENT_HITS)
+    {
+        payload.color[payload.hitCount] = float4(0.2f, 0.2f, 0.2f, -1.f);
+        payload.hitCount++;
+    }
 }

+ 9 - 3
RayGen.hlsl

@@ -23,7 +23,8 @@ void RayGen()
 {
   // Initialize the ray payload
     HitInfo rayPayload;
-    rayPayload.colorAndDistance = float4(0, 0, 0, 1.0);
+    rayPayload.hitCount = 0;
+    float4 color = float4(0, 0, 0, 0);
 
     // Get the location within the dispatched 2D grid of work items
     // (often maps to pixels, so this could represent a pixel coordinate).
@@ -43,6 +44,11 @@ void RayGen()
         ray.TMax = maxDistance;
         TraceRay(TLAS, /*RayFlags*/0, /*InstanceInclusionMask*/0xFF, /*RayContributionToHitGroupIndex*/0,
             /*MultiplierForGeometryContributionToHitGroupIndex*/0, /*MissShaderIndex*/0, ray, rayPayload);
+        color = rayPayload.color[rayPayload.hitCount - 1];
+        for (int i = rayPayload.hitCount - 2; i >= 0; i--)
+        {
+            color.rgb = rayPayload.color[i].rgb * rayPayload.color[i].a + color.rgb * (1 - rayPayload.color[i].a);
+        }
     }
     
     uint outWidth, outHeight;
@@ -54,8 +60,8 @@ void RayGen()
         guiTexture.GetDimensions(guiWidth, guiHeight);
         uint2 guiIndex = uint2(dispatchPercentage * float2(guiWidth, guiHeight));
         float4 guiColor = guiTexture[guiIndex];
-        rayPayload.colorAndDistance.rgb = rayPayload.colorAndDistance.rgb * (1 - guiColor.a) + guiColor.rgb * guiColor.a;
+        color.rgb = color.rgb * (1 - guiColor.a) + guiColor.rgb * guiColor.a;
     }
-    gOutput[outputIndex] = float4(rayPayload.colorAndDistance.rgb, 1.f);
+    gOutput[outputIndex] = float4(color.rgb, 1.f);
 
 }

+ 5 - 0
Texture.cpp

@@ -80,3 +80,8 @@ void Framework::Texture::setBufferChanged(bool changed)
 {
     bufferChanged = changed;
 }
+
+void Framework::Texture::setName(const char* name)
+{
+    this->name = name;
+}

+ 5 - 1
Texture.h

@@ -1,8 +1,8 @@
 #pragma once
 
-#include "Critical.h"
 #include "Point.h"
 #include "ReferenceCounter.h"
+#include "Text.h"
 
 namespace Framework
 {
@@ -28,6 +28,7 @@ namespace Framework
         int id;
         TextureDirection direction;
         bool bufferChanged;
+        Text name;
 
     public:
         //! Constructor
@@ -58,6 +59,9 @@ namespace Framework
         DLLEXPORT bool hasBufferChanged() const;
         // Sets whether the texture has changed since the last update
         DLLEXPORT void setBufferChanged(bool changed);
+        // Sets the name of the texture. This name also acociated with the
+        // underlying direct x recource and can be used for debugging purposes.
+        DLLEXPORT void setName(const char* name);
 
         friend TextureList;
     };

+ 1 - 0
TextureList.cpp

@@ -38,6 +38,7 @@ bool TextureList::addTexture(Texture* t, const char* name)
         }
     }
     t->id = nextId++;
+    t->setName(name);
     textures->add(t);
     names->add(new Text(name));
     lock.unlockWrite();