commit 5caa1ec20270c1185da5f50c0ab1f8a077a00600
parent e8963b5923b52555159bd08c0a24eb82b9cbb9df
Author: Lee Salzman <lsalzman@mozilla.com>
Date: Mon, 27 Oct 2025 02:55:37 +0000
Bug 1996124 - Remove DrawTargetD2D. r=aosmond
DrawTargetD2D is only needed when Direct2D is enabled. We no longer support Direct2D.
Differential Revision: https://phabricator.services.mozilla.com/D269879
Diffstat:
46 files changed, 70 insertions(+), 21219 deletions(-)
diff --git a/gfx/2d/2D.h b/gfx/2d/2D.h
@@ -63,9 +63,6 @@ typedef _FcPattern FcPattern;
struct ID3D11Texture2D;
struct ID3D11Device;
-struct ID2D1Device;
-struct ID2D1DeviceContext;
-struct ID2D1Multithread;
struct IDWriteFactory;
struct IDWriteRenderingParams;
struct IDWriteFontFace;
@@ -2358,28 +2355,12 @@ class GFX2D_API Factory {
#endif
#ifdef WIN32
- static already_AddRefed<DrawTarget> CreateDrawTargetForD3D11Texture(
- ID3D11Texture2D* aTexture, SurfaceFormat aFormat);
-
- /*
- * Attempts to create and install a D2D1 device from the supplied Direct3D11
- * device. Returns true on success, or false on failure and leaves the
- * D2D1/Direct3D11 devices unset.
- */
static bool SetDirect3D11Device(ID3D11Device* aDevice);
static RefPtr<ID3D11Device> GetDirect3D11Device();
- static RefPtr<ID2D1Device> GetD2D1Device(uint32_t* aOutSeqNo = nullptr);
- static bool HasD2D1Device();
static RefPtr<IDWriteFactory> GetDWriteFactory();
static RefPtr<IDWriteFactory> EnsureDWriteFactory();
- static bool SupportsD2D1();
static RefPtr<IDWriteFontCollection> GetDWriteSystemFonts(
bool aUpdate = false);
- static RefPtr<ID2D1DeviceContext> GetD2DDeviceContext();
-
- static uint64_t GetD2DVRAMUsageDrawTarget();
- static uint64_t GetD2DVRAMUsageSourceSurface();
- static void D2DCleanup();
static already_AddRefed<ScaledFont> CreateScaledFontForDWriteFont(
IDWriteFontFace* aFontFace, const gfxFontStyle* aStyle,
@@ -2410,13 +2391,10 @@ class GFX2D_API Factory {
gfx::ColorRange aColorRange);
private:
- static StaticRefPtr<ID2D1Device> mD2D1Device;
static StaticRefPtr<ID3D11Device> mD3D11Device;
static StaticRefPtr<IDWriteFactory> mDWriteFactory;
static bool mDWriteFactoryInitialized;
static StaticRefPtr<IDWriteFontCollection> mDWriteSystemFonts;
- static StaticRefPtr<ID2D1DeviceContext> mMTDC;
- static StaticRefPtr<ID2D1DeviceContext> mOffMTDC;
static bool ReadbackTexture(uint8_t* aDestData, int32_t aDestStride,
ID3D11Texture2D* aSrcTexture);
@@ -2432,25 +2410,9 @@ class GFX2D_API Factory {
// This guards access to the singleton devices above, as well as the
// singleton devices in DrawTargetD2D1.
static StaticMutex mDeviceLock;
- // This synchronizes access between different D2D drawtargets and their
- // implied dependency graph.
- static StaticMutex mDTDependencyLock;
-
- friend class DrawTargetD2D1;
#endif // WIN32
};
-class MOZ_RAII AutoSerializeWithMoz2D final {
- public:
- explicit AutoSerializeWithMoz2D(BackendType aBackendType);
- ~AutoSerializeWithMoz2D();
-
- private:
-#if defined(WIN32)
- RefPtr<ID2D1Multithread> mMT;
-#endif
-};
-
} // namespace gfx
} // namespace mozilla
diff --git a/gfx/2d/ConicGradientEffectD2D1.cpp b/gfx/2d/ConicGradientEffectD2D1.cpp
@@ -1,375 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ConicGradientEffectD2D1.h"
-
-#include "Logging.h"
-
-#include "ShadersD2D1.h"
-#include "HelpersD2D.h"
-
-#include <vector>
-
-#define TEXTW(x) L##x
-#define XML(X) \
- TEXTW(#X) // This macro creates a single string from multiple lines of text.
-
-static const PCWSTR kXmlDescription =
- XML(
- <?xml version='1.0'?>
- <Effect>
- <!-- System Properties -->
- <Property name='DisplayName' type='string' value='ConicGradientEffect'/>
- <Property name='Author' type='string' value='Mozilla'/>
- <Property name='Category' type='string' value='Pattern effects'/>
- <Property name='Description' type='string' value='This effect is used to render CSS conic gradients.'/>
- <Inputs>
- <Input name='Geometry'/>
- </Inputs>
- <Property name='StopCollection' type='iunknown'>
- <Property name='DisplayName' type='string' value='Gradient stop collection'/>
- </Property>
- <Property name='Center' type='vector2'>
- <Property name='DisplayName' type='string' value='Gradient center'/>
- </Property>
- <Property name='Angle' type='vector2'>
- <Property name='DisplayName' type='string' value='Gradient angle'/>
- </Property>
- <Property name='StartOffset' type='float'>
- <Property name='DisplayName' type='string' value='Start stop offset'/>
- </Property>
- <Property name='EndOffset' type='float'>
- <Property name='DisplayName' type='string' value='End stop offset'/>
- </Property>
- <Property name='Transform' type='matrix3x2'>
- <Property name='DisplayName' type='string' value='Transform applied to the pattern'/>
- </Property>
-
- </Effect>
- );
-
-// {091fda1d-857e-4b1e-828f-1c839d9b7897}
-static const GUID GUID_SampleConicGradientPS = {
- 0x091fda1d,
- 0x857e,
- 0x4b1e,
- {0x82, 0x8f, 0x1c, 0x83, 0x9d, 0x9b, 0x78, 0x97}};
-
-namespace mozilla {
-namespace gfx {
-
-ConicGradientEffectD2D1::ConicGradientEffectD2D1()
- : mRefCount(0),
- mCenter(D2D1::Vector2F(0, 0)),
- mAngle(0),
- mStartOffset(0),
- mEndOffset(0),
- mTransform(D2D1::IdentityMatrix())
-
-{}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::Initialize(ID2D1EffectContext* pContextInternal,
- ID2D1TransformGraph* pTransformGraph) {
- HRESULT hr;
-
- hr = pContextInternal->LoadPixelShader(GUID_SampleConicGradientPS,
- SampleConicGradientPS,
- sizeof(SampleConicGradientPS));
-
- if (FAILED(hr)) {
- return hr;
- }
-
- hr = pTransformGraph->SetSingleTransformNode(this);
-
- if (FAILED(hr)) {
- return hr;
- }
-
- mEffectContext = pContextInternal;
-
- return S_OK;
-}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::PrepareForRender(D2D1_CHANGE_TYPE changeType) {
- if (changeType == D2D1_CHANGE_TYPE_NONE) {
- return S_OK;
- }
-
- // We'll need to inverse transform our pixel, precompute inverse here.
- Matrix mat = ToMatrix(mTransform);
- if (!mat.Invert()) {
- // Singular
- return S_OK;
- }
-
- if (!mStopCollection) {
- return S_OK;
- }
-
- HRESULT hr = mDrawInfo->SetPixelShader(GUID_SampleConicGradientPS);
-
- if (FAILED(hr)) {
- return hr;
- }
-
- RefPtr<ID2D1ResourceTexture> tex = CreateGradientTexture();
- hr = mDrawInfo->SetResourceTexture(1, tex);
-
- if (FAILED(hr)) {
- return hr;
- }
-
- struct PSConstantBuffer {
- float center[2];
- float angle;
- float start_offset;
- float end_offset;
- float repeat_correct;
- float allow_odd;
- float padding[1];
- float transform[8];
- };
-
- PSConstantBuffer buffer = {
- {mCenter.x, mCenter.y},
- mAngle,
- mStartOffset,
- mEndOffset,
- mStopCollection->GetExtendMode() != D2D1_EXTEND_MODE_CLAMP ? 1.0f : 0.0f,
- mStopCollection->GetExtendMode() == D2D1_EXTEND_MODE_MIRROR ? 1.0f : 0.0f,
- {0.0f},
- {mat._11, mat._21, mat._31, 0.0f, mat._12, mat._22, mat._32, 0.0f}};
-
- hr = mDrawInfo->SetPixelShaderConstantBuffer((BYTE*)&buffer, sizeof(buffer));
-
- if (FAILED(hr)) {
- return hr;
- }
-
- return S_OK;
-}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::SetGraph(ID2D1TransformGraph* pGraph) {
- return pGraph->SetSingleTransformNode(this);
-}
-
-IFACEMETHODIMP_(ULONG)
-ConicGradientEffectD2D1::AddRef() { return ++mRefCount; }
-
-IFACEMETHODIMP_(ULONG)
-ConicGradientEffectD2D1::Release() {
- if (!--mRefCount) {
- delete this;
- return 0;
- }
- return mRefCount;
-}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::QueryInterface(const IID& aIID, void** aPtr) {
- if (!aPtr) {
- return E_POINTER;
- }
-
- if (aIID == IID_IUnknown) {
- *aPtr = static_cast<IUnknown*>(static_cast<ID2D1EffectImpl*>(this));
- } else if (aIID == IID_ID2D1EffectImpl) {
- *aPtr = static_cast<ID2D1EffectImpl*>(this);
- } else if (aIID == IID_ID2D1DrawTransform) {
- *aPtr = static_cast<ID2D1DrawTransform*>(this);
- } else if (aIID == IID_ID2D1Transform) {
- *aPtr = static_cast<ID2D1Transform*>(this);
- } else if (aIID == IID_ID2D1TransformNode) {
- *aPtr = static_cast<ID2D1TransformNode*>(this);
- } else {
- return E_NOINTERFACE;
- }
-
- static_cast<IUnknown*>(*aPtr)->AddRef();
- return S_OK;
-}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::MapInputRectsToOutputRect(
- const D2D1_RECT_L* pInputRects, const D2D1_RECT_L* pInputOpaqueSubRects,
- UINT32 inputRectCount, D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pOutputOpaqueSubRect) {
- if (inputRectCount != 1) {
- return E_INVALIDARG;
- }
-
- *pOutputRect = *pInputRects;
- *pOutputOpaqueSubRect = *pInputOpaqueSubRects;
- return S_OK;
-}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::MapOutputRectToInputRects(
- const D2D1_RECT_L* pOutputRect, D2D1_RECT_L* pInputRects,
- UINT32 inputRectCount) const {
- if (inputRectCount != 1) {
- return E_INVALIDARG;
- }
-
- *pInputRects = *pOutputRect;
- return S_OK;
-}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::MapInvalidRect(UINT32 inputIndex,
- D2D1_RECT_L invalidInputRect,
- D2D1_RECT_L* pInvalidOutputRect) const {
- MOZ_ASSERT(inputIndex == 0);
-
- *pInvalidOutputRect = invalidInputRect;
- return S_OK;
-}
-
-IFACEMETHODIMP
-ConicGradientEffectD2D1::SetDrawInfo(ID2D1DrawInfo* pDrawInfo) {
- mDrawInfo = pDrawInfo;
- return S_OK;
-}
-
-HRESULT
-ConicGradientEffectD2D1::Register(ID2D1Factory1* aFactory) {
- D2D1_PROPERTY_BINDING bindings[] = {
- D2D1_VALUE_TYPE_BINDING(L"StopCollection",
- &ConicGradientEffectD2D1::SetStopCollection,
- &ConicGradientEffectD2D1::GetStopCollection),
- D2D1_VALUE_TYPE_BINDING(L"Center", &ConicGradientEffectD2D1::SetCenter,
- &ConicGradientEffectD2D1::GetCenter),
- D2D1_VALUE_TYPE_BINDING(L"Angle", &ConicGradientEffectD2D1::SetAngle,
- &ConicGradientEffectD2D1::GetAngle),
- D2D1_VALUE_TYPE_BINDING(L"StartOffset",
- &ConicGradientEffectD2D1::SetStartOffset,
- &ConicGradientEffectD2D1::GetStartOffset),
- D2D1_VALUE_TYPE_BINDING(L"EndOffset",
- &ConicGradientEffectD2D1::SetEndOffset,
- &ConicGradientEffectD2D1::GetEndOffset),
- D2D1_VALUE_TYPE_BINDING(L"Transform",
- &ConicGradientEffectD2D1::SetTransform,
- &ConicGradientEffectD2D1::GetTransform)};
- HRESULT hr = aFactory->RegisterEffectFromString(
- CLSID_ConicGradientEffect, kXmlDescription, bindings, ARRAYSIZE(bindings),
- CreateEffect);
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to register radial gradient effect.";
- }
- return hr;
-}
-
-void ConicGradientEffectD2D1::Unregister(ID2D1Factory1* aFactory) {
- aFactory->UnregisterEffect(CLSID_ConicGradientEffect);
-}
-
-HRESULT __stdcall ConicGradientEffectD2D1::CreateEffect(
- IUnknown** aEffectImpl) {
- *aEffectImpl = static_cast<ID2D1EffectImpl*>(new ConicGradientEffectD2D1());
- (*aEffectImpl)->AddRef();
-
- return S_OK;
-}
-
-HRESULT
-ConicGradientEffectD2D1::SetStopCollection(IUnknown* aStopCollection) {
- if (SUCCEEDED(aStopCollection->QueryInterface(
- (ID2D1GradientStopCollection**)getter_AddRefs(mStopCollection)))) {
- return S_OK;
- }
-
- return E_INVALIDARG;
-}
-
-already_AddRefed<ID2D1ResourceTexture>
-ConicGradientEffectD2D1::CreateGradientTexture() {
- std::vector<D2D1_GRADIENT_STOP> rawStops;
- rawStops.resize(mStopCollection->GetGradientStopCount());
- mStopCollection->GetGradientStops(&rawStops.front(), rawStops.size());
-
- std::vector<unsigned char> textureData;
- textureData.resize(4096 * 4);
- unsigned char* texData = &textureData.front();
-
- float prevColorPos = 0;
- float nextColorPos = rawStops[0].position;
- D2D1_COLOR_F prevColor = rawStops[0].color;
- D2D1_COLOR_F nextColor = prevColor;
- uint32_t stopPosition = 1;
-
- // Not the most optimized way but this will do for now.
- for (int i = 0; i < 4096; i++) {
- // The 4095 seems a little counter intuitive, but we want the gradient
- // color at offset 0 at the first pixel, and at offset 1.0f at the last
- // pixel.
- float pos = float(i) / 4095;
-
- while (pos > nextColorPos) {
- prevColor = nextColor;
- prevColorPos = nextColorPos;
- if (rawStops.size() > stopPosition) {
- nextColor = rawStops[stopPosition].color;
- nextColorPos = rawStops[stopPosition++].position;
- } else {
- nextColorPos = 1.0f;
- }
- }
-
- float interp;
-
- if (nextColorPos != prevColorPos) {
- interp = (pos - prevColorPos) / (nextColorPos - prevColorPos);
- } else {
- interp = 0;
- }
-
- DeviceColor newColor(prevColor.r + (nextColor.r - prevColor.r) * interp,
- prevColor.g + (nextColor.g - prevColor.g) * interp,
- prevColor.b + (nextColor.b - prevColor.b) * interp,
- prevColor.a + (nextColor.a - prevColor.a) * interp);
-
- // Note D2D expects RGBA here!!
- texData[i * 4] = (unsigned char)(255.0f * newColor.r);
- texData[i * 4 + 1] = (unsigned char)(255.0f * newColor.g);
- texData[i * 4 + 2] = (unsigned char)(255.0f * newColor.b);
- texData[i * 4 + 3] = (unsigned char)(255.0f * newColor.a);
- }
-
- RefPtr<ID2D1ResourceTexture> tex;
-
- UINT32 width = 4096;
- UINT32 stride = 4096 * 4;
- D2D1_RESOURCE_TEXTURE_PROPERTIES props;
- // Older shader models do not support 1D textures. So just use a width x 1
- // texture.
- props.dimensions = 2;
- UINT32 dims[] = {width, 1};
- props.extents = dims;
- props.channelDepth = D2D1_CHANNEL_DEPTH_4;
- props.bufferPrecision = D2D1_BUFFER_PRECISION_8BPC_UNORM;
- props.filter = D2D1_FILTER_MIN_MAG_MIP_LINEAR;
- D2D1_EXTEND_MODE extendMode[] = {mStopCollection->GetExtendMode(),
- mStopCollection->GetExtendMode()};
- props.extendModes = extendMode;
-
- HRESULT hr = mEffectContext->CreateResourceTexture(
- nullptr, &props, &textureData.front(), &stride, 4096 * 4,
- getter_AddRefs(tex));
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to create resource texture: " << hexa(hr);
- }
-
- return tex.forget();
-}
-
-} // namespace gfx
-} // namespace mozilla
diff --git a/gfx/2d/ConicGradientEffectD2D1.h b/gfx/2d/ConicGradientEffectD2D1.h
@@ -1,102 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_CONICGRADIENTEFFECTD2D1_H_
-#define MOZILLA_GFX_CONICGRADIENTEFFECTD2D1_H_
-
-#include <d2d1_1.h>
-#include <d2d1effectauthor.h>
-#include <d2d1effecthelpers.h>
-
-#include "2D.h"
-
-// {fa4e3246-be57-4052-8c8b-881cc3633287}
-DEFINE_GUID(CLSID_ConicGradientEffect, 0xfa4e3246, 0xbe57, 0x4052, 0x8c, 0x8b,
- 0x88, 0x1c, 0xc3, 0x63, 0x32, 0x87);
-
-// Macro to keep our class nice and clean.
-#define SIMPLE_PROP(type, name) \
- public: \
- HRESULT Set##name(type a##name) { \
- m##name = a##name; \
- return S_OK; \
- } \
- type Get##name() const { return m##name; } \
- \
- private: \
- type m##name;
-
-namespace mozilla {
-namespace gfx {
-
-enum {
- CONIC_PROP_STOP_COLLECTION = 0,
- CONIC_PROP_CENTER,
- CONIC_PROP_ANGLE,
- CONIC_PROP_START_OFFSET,
- CONIC_PROP_END_OFFSET,
- CONIC_PROP_TRANSFORM
-};
-
-class ConicGradientEffectD2D1 final : public ID2D1EffectImpl,
- public ID2D1DrawTransform {
- public:
- // ID2D1EffectImpl
- IFACEMETHODIMP Initialize(ID2D1EffectContext* pContextInternal,
- ID2D1TransformGraph* pTransformGraph);
- IFACEMETHODIMP PrepareForRender(D2D1_CHANGE_TYPE changeType);
- IFACEMETHODIMP SetGraph(ID2D1TransformGraph* pGraph);
-
- // IUnknown
- IFACEMETHODIMP_(ULONG) AddRef();
- IFACEMETHODIMP_(ULONG) Release();
- IFACEMETHODIMP QueryInterface(REFIID riid, void** ppOutput);
-
- // ID2D1Transform
- IFACEMETHODIMP MapInputRectsToOutputRect(
- const D2D1_RECT_L* pInputRects, const D2D1_RECT_L* pInputOpaqueSubRects,
- UINT32 inputRectCount, D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pOutputOpaqueSubRect);
- IFACEMETHODIMP MapOutputRectToInputRects(const D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pInputRects,
- UINT32 inputRectCount) const;
- IFACEMETHODIMP MapInvalidRect(UINT32 inputIndex, D2D1_RECT_L invalidInputRect,
- D2D1_RECT_L* pInvalidOutputRect) const;
-
- // ID2D1TransformNode
- IFACEMETHODIMP_(UINT32) GetInputCount() const { return 1; }
-
- // ID2D1DrawTransform
- IFACEMETHODIMP SetDrawInfo(ID2D1DrawInfo* pDrawInfo);
-
- static HRESULT Register(ID2D1Factory1* aFactory);
- static void Unregister(ID2D1Factory1* aFactory);
- static HRESULT __stdcall CreateEffect(IUnknown** aEffectImpl);
-
- HRESULT SetStopCollection(IUnknown* aStopCollection);
- IUnknown* GetStopCollection() const { return mStopCollection; }
-
- private:
- already_AddRefed<ID2D1ResourceTexture> CreateGradientTexture();
-
- ConicGradientEffectD2D1();
-
- uint32_t mRefCount;
- RefPtr<ID2D1GradientStopCollection> mStopCollection;
- RefPtr<ID2D1EffectContext> mEffectContext;
- RefPtr<ID2D1DrawInfo> mDrawInfo;
- SIMPLE_PROP(D2D1_VECTOR_2F, Center);
- SIMPLE_PROP(FLOAT, Angle);
- SIMPLE_PROP(FLOAT, StartOffset);
- SIMPLE_PROP(FLOAT, EndOffset);
- SIMPLE_PROP(D2D_MATRIX_3X2_F, Transform);
-};
-
-} // namespace gfx
-} // namespace mozilla
-#undef SIMPLE_PROP
-
-#endif
diff --git a/gfx/2d/DrawTargetD2D1.cpp b/gfx/2d/DrawTargetD2D1.cpp
@@ -1,2413 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include <optional>
-
-#include <initguid.h>
-#include "DrawTargetD2D1.h"
-#include "FilterNodeSoftware.h"
-#include "GradientStopsD2D.h"
-#include "SourceSurfaceD2D1.h"
-#include "ConicGradientEffectD2D1.h"
-#include "RadialGradientEffectD2D1.h"
-
-#include "HelpersD2D.h"
-#include "FilterNodeD2D1.h"
-#include "ExtendInputEffectD2D1.h"
-#include "nsAppRunner.h"
-#include "MainThreadUtils.h"
-
-#include "mozilla/Mutex.h"
-
-// decltype is not usable for overloaded functions.
-typedef HRESULT(WINAPI* D2D1CreateFactoryFunc)(
- D2D1_FACTORY_TYPE factoryType, REFIID iid,
- CONST D2D1_FACTORY_OPTIONS* pFactoryOptions, void** factory);
-
-namespace mozilla {
-namespace gfx {
-
-uint64_t DrawTargetD2D1::mVRAMUsageDT;
-uint64_t DrawTargetD2D1::mVRAMUsageSS;
-StaticRefPtr<ID2D1Factory1> DrawTargetD2D1::mFactory;
-
-MOZ_RUNINIT const D2D1_MATRIX_5X4_F kLuminanceMatrix =
- D2D1::Matrix5x4F(0, 0, 0, 0.2125f, 0, 0, 0, 0.7154f, 0, 0, 0, 0.0721f, 0, 0,
- 0, 0, 0, 0, 0, 0);
-
-RefPtr<ID2D1Factory1> D2DFactory() { return DrawTargetD2D1::factory(); }
-
-DrawTargetD2D1::DrawTargetD2D1()
- : mPushedLayers(1),
- mSnapshotLock(std::make_shared<Mutex>("DrawTargetD2D1::mSnapshotLock")),
- mUsedCommandListsSincePurge(0),
- mTransformedGlyphsSinceLastPurge(0),
- mComplexBlendsWithListInList(0),
- mDeviceSeq(0),
- mInitState(InitState::Uninitialized) {}
-
-DrawTargetD2D1::~DrawTargetD2D1() {
- PopAllClips();
-
- if (mSnapshot) {
- MutexAutoLock lock(*mSnapshotLock);
- // We may hold the only reference. MarkIndependent will clear mSnapshot;
- // keep the snapshot object alive so it doesn't get destroyed while
- // MarkIndependent is running.
- RefPtr<SourceSurfaceD2D1> deathGrip = mSnapshot;
- // mSnapshot can be treated as independent of this DrawTarget since we know
- // this DrawTarget won't change again.
- deathGrip->MarkIndependent();
- // mSnapshot will be cleared now.
- }
-
- if (mDC && IsDeviceContextValid()) {
- // The only way mDC can be null is if Init failed, but it can happen and the
- // destructor is the only place where we need to check for it since the
- // DrawTarget will destroyed right after Init fails.
- mDC->EndDraw();
- }
-
- {
- // Until this point in the destructor it -must- still be valid for
- // FlushInternal to be called on this.
- StaticMutexAutoLock lock(Factory::mDTDependencyLock);
- // Targets depending on us can break that dependency, since we're obviously
- // not going to be modified in the future.
- for (auto iter = mDependentTargets.begin(); iter != mDependentTargets.end();
- iter++) {
- (*iter)->mDependingOnTargets.erase(this);
- }
- // Our dependencies on other targets no longer matter.
- for (TargetSet::iterator iter = mDependingOnTargets.begin();
- iter != mDependingOnTargets.end(); iter++) {
- (*iter)->mDependentTargets.erase(this);
- }
- }
-}
-
-bool DrawTargetD2D1::IsValid() const {
- if (mInitState != InitState::Uninitialized && !IsDeviceContextValid()) {
- return false;
- }
- if (NS_IsMainThread()) {
- // Uninitialized DTs are considered valid.
- return mInitState != InitState::Failure;
- } else {
- return const_cast<DrawTargetD2D1*>(this)->EnsureInitialized();
- }
-}
-
-already_AddRefed<SourceSurface> DrawTargetD2D1::Snapshot() {
- if (!EnsureInitialized()) {
- return nullptr;
- }
-
- MutexAutoLock lock(*mSnapshotLock);
- if (mSnapshot) {
- RefPtr<SourceSurface> snapshot(mSnapshot);
- return snapshot.forget();
- }
- PopAllClips();
-
- Flush();
-
- mSnapshot = new SourceSurfaceD2D1(mBitmap, mDC, mFormat, mSize, this);
-
- RefPtr<SourceSurface> snapshot(mSnapshot);
- return snapshot.forget();
-}
-
-bool DrawTargetD2D1::EnsureLuminanceEffect() {
- if (mLuminanceEffect.get()) {
- return true;
- }
-
- HRESULT hr = mDC->CreateEffect(CLSID_D2D1ColorMatrix,
- getter_AddRefs(mLuminanceEffect));
- if (FAILED(hr)) {
- gfxCriticalError() << "Failed to create luminance effect. Code: "
- << hexa(hr);
- return false;
- }
-
- mLuminanceEffect->SetValue(D2D1_COLORMATRIX_PROP_COLOR_MATRIX,
- kLuminanceMatrix);
- mLuminanceEffect->SetValue(D2D1_COLORMATRIX_PROP_ALPHA_MODE,
- D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT);
- return true;
-}
-
-already_AddRefed<SourceSurface> DrawTargetD2D1::IntoLuminanceSource(
- LuminanceType aLuminanceType, float aOpacity) {
- if (!EnsureInitialized()) {
- return nullptr;
- }
- if ((aLuminanceType != LuminanceType::LUMINANCE) ||
- // See bug 1372577, some race condition where we get invalid
- // results with D2D in the parent process. Fallback in that case.
- XRE_IsParentProcess()) {
- return DrawTarget::IntoLuminanceSource(aLuminanceType, aOpacity);
- }
-
- // Create the luminance effect
- if (!EnsureLuminanceEffect()) {
- return DrawTarget::IntoLuminanceSource(aLuminanceType, aOpacity);
- }
-
- Flush();
-
- {
- D2D1_MATRIX_5X4_F matrix = kLuminanceMatrix;
- matrix._14 *= aOpacity;
- matrix._24 *= aOpacity;
- matrix._34 *= aOpacity;
-
- mLuminanceEffect->SetValue(D2D1_COLORMATRIX_PROP_COLOR_MATRIX, matrix);
- }
-
- mLuminanceEffect->SetInput(0, mBitmap);
-
- RefPtr<ID2D1Image> luminanceOutput;
- mLuminanceEffect->GetOutput(getter_AddRefs(luminanceOutput));
-
- return MakeAndAddRef<SourceSurfaceD2D1>(luminanceOutput, mDC,
- SurfaceFormat::B8G8R8A8, mSize);
-}
-
-// Command lists are kept around by device contexts until EndDraw is called,
-// this can cause issues with memory usage (see bug 1238328). EndDraw/BeginDraw
-// are expensive though, especially relatively when little work is done, so
-// we try to reduce the amount of times we execute these purges.
-static const uint32_t kPushedLayersBeforePurge = 25;
-// Rendering glyphs with different transforms causes the glyph cache to grow
-// very large (see bug 1474883) so we must call EndDraw every so often.
-static const uint32_t kTransformedGlyphsBeforePurge = 1000;
-
-void DrawTargetD2D1::Flush() { FlushInternal(); }
-
-bool DrawTargetD2D1::MaybeClearRect(CompositionOp aOp, const Rect& aBounds) {
- if (aOp == CompositionOp::OP_CLEAR) {
- FillRect(aBounds, ColorPattern(DeviceColor(1.0f, 1.0f, 1.0f, 1.0f)),
- DrawOptions(1.0f, aOp));
- return true;
- }
- return false;
-}
-
-void DrawTargetD2D1::DrawSurface(SourceSurface* aSurface, const Rect& aDest,
- const Rect& aSource,
- const DrawSurfaceOptions& aSurfOptions,
- const DrawOptions& aOptions) {
- if (MaybeClearRect(aOptions.mCompositionOp, aDest)) {
- return;
- }
-
- if (!PrepareForDrawing(aOptions.mCompositionOp,
- ColorPattern(DeviceColor()))) {
- return;
- }
-
- Rect source = aSource - aSurface->GetRect().TopLeft();
-
- D2D1_RECT_F samplingBounds;
-
- if (aSurfOptions.mSamplingBounds == SamplingBounds::BOUNDED) {
- samplingBounds = D2DRect(source);
- } else {
- samplingBounds = D2D1::RectF(0, 0, Float(aSurface->GetSize().width),
- Float(aSurface->GetSize().height));
- }
-
- Float xScale = aDest.Width() / source.Width();
- Float yScale = aDest.Height() / source.Height();
-
- RefPtr<ID2D1ImageBrush> brush;
-
- // Here we scale the source pattern up to the size and position where we want
- // it to be.
- Matrix transform;
- transform.PreTranslate(aDest.X() - source.X() * xScale,
- aDest.Y() - source.Y() * yScale);
- transform.PreScale(xScale, yScale);
-
- RefPtr<ID2D1Image> image =
- GetImageForSurface(aSurface, transform, ExtendMode::CLAMP);
-
- if (!image) {
- gfxWarning() << *this << ": Unable to get D2D image for surface.";
- return;
- }
-
- RefPtr<ID2D1Bitmap> bitmap;
- HRESULT hr = E_FAIL;
- if (aSurface->GetType() == SurfaceType::D2D1_1_IMAGE) {
- // If this is called with a DataSourceSurface it might do a partial upload
- // that our DrawBitmap call doesn't support.
- hr = image->QueryInterface((ID2D1Bitmap**)getter_AddRefs(bitmap));
- }
-
- if (SUCCEEDED(hr) && bitmap &&
- aSurfOptions.mSamplingBounds == SamplingBounds::UNBOUNDED) {
- mDC->DrawBitmap(bitmap, D2DRect(aDest), aOptions.mAlpha,
- D2DFilter(aSurfOptions.mSamplingFilter), D2DRect(source));
- } else {
- // This has issues ignoring the alpha channel on windows 7 with images
- // marked opaque.
- MOZ_ASSERT(aSurface->GetFormat() != SurfaceFormat::B8G8R8X8);
-
- // Bug 1275478 - D2D1 cannot draw A8 surface correctly.
- MOZ_ASSERT(aSurface->GetFormat() != SurfaceFormat::A8);
-
- mDC->CreateImageBrush(
- image,
- D2D1::ImageBrushProperties(
- samplingBounds, D2D1_EXTEND_MODE_CLAMP, D2D1_EXTEND_MODE_CLAMP,
- D2DInterpolationMode(aSurfOptions.mSamplingFilter)),
- D2D1::BrushProperties(aOptions.mAlpha, D2DMatrix(transform)),
- getter_AddRefs(brush));
- mDC->FillRectangle(D2DRect(aDest), brush);
- }
-
- FinalizeDrawing(aOptions.mCompositionOp, ColorPattern(DeviceColor()));
-}
-
-void DrawTargetD2D1::DrawFilter(FilterNode* aNode, const Rect& aSourceRect,
- const Point& aDestPoint,
- const DrawOptions& aOptions) {
- if (aNode->GetBackendType() != FILTER_BACKEND_DIRECT2D1_1) {
- gfxWarning() << *this << ": Incompatible filter passed to DrawFilter.";
- return;
- }
-
- if (MaybeClearRect(aOptions.mCompositionOp,
- Rect(aDestPoint, aSourceRect.Size()))) {
- return;
- }
-
- if (!PrepareForDrawing(aOptions.mCompositionOp,
- ColorPattern(DeviceColor()))) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- FilterNodeD2D1* node = static_cast<FilterNodeD2D1*>(aNode);
- node->WillDraw(this);
-
- if (aOptions.mAlpha == 1.0f) {
- mDC->DrawImage(node->OutputEffect(), D2DPoint(aDestPoint),
- D2DRect(aSourceRect));
- } else {
- RefPtr<ID2D1Image> image;
- node->OutputEffect()->GetOutput(getter_AddRefs(image));
-
- Matrix mat = Matrix::Translation(aDestPoint);
-
- RefPtr<ID2D1ImageBrush> imageBrush;
- mDC->CreateImageBrush(
- image, D2D1::ImageBrushProperties(D2DRect(aSourceRect)),
- D2D1::BrushProperties(aOptions.mAlpha, D2DMatrix(mat)),
- getter_AddRefs(imageBrush));
- mDC->FillRectangle(D2D1::RectF(aDestPoint.x, aDestPoint.y,
- aDestPoint.x + aSourceRect.width,
- aDestPoint.y + aSourceRect.height),
- imageBrush);
- }
-
- FinalizeDrawing(aOptions.mCompositionOp, ColorPattern(DeviceColor()));
-}
-
-void DrawTargetD2D1::DrawSurfaceWithShadow(SourceSurface* aSurface,
- const Point& aDest,
- const ShadowOptions& aShadow,
- CompositionOp aOperator) {
- if (!EnsureInitialized()) {
- return;
- }
-
- if (MaybeClearRect(aOperator, Rect(aDest, Size(aSurface->GetSize())))) {
- return;
- }
-
- MarkChanged();
-
- Matrix mat;
- RefPtr<ID2D1Image> image =
- GetImageForSurface(aSurface, mat, ExtendMode::CLAMP, nullptr, false);
-
- if (!image) {
- gfxWarning() << "Couldn't get image for surface.";
- return;
- }
-
- if (!mat.IsIdentity()) {
- gfxDebug() << *this
- << ": At this point complex partial uploads are not supported "
- "for Shadow surfaces.";
- return;
- }
-
- if (!PrepareForDrawing(aOperator, ColorPattern(aShadow.mColor))) {
- return;
- }
-
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- RefPtr<ID2D1Effect> shadowEffect;
- HRESULT hr = mDC->CreateEffect(
- mFormat == SurfaceFormat::A8 ? CLSID_D2D1GaussianBlur : CLSID_D2D1Shadow,
- getter_AddRefs(shadowEffect));
- if (SUCCEEDED(hr) && shadowEffect) {
- shadowEffect->SetInput(0, image);
- if (mFormat == SurfaceFormat::A8) {
- shadowEffect->SetValue(D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION,
- aShadow.mSigma);
- shadowEffect->SetValue(D2D1_GAUSSIANBLUR_PROP_BORDER_MODE,
- D2D1_BORDER_MODE_HARD);
- } else {
- shadowEffect->SetValue(D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION,
- aShadow.mSigma);
- D2D1_VECTOR_4F color = {aShadow.mColor.r, aShadow.mColor.g,
- aShadow.mColor.b, aShadow.mColor.a};
- shadowEffect->SetValue(D2D1_SHADOW_PROP_COLOR, color);
- }
-
- D2D1_POINT_2F shadowPoint = D2DPoint(aDest + aShadow.mOffset);
- mDC->DrawImage(shadowEffect, &shadowPoint, nullptr,
- D2D1_INTERPOLATION_MODE_LINEAR,
- D2D1_COMPOSITE_MODE_SOURCE_OVER);
- } else {
- gfxWarning() << "Failed to create shadow effect. Code: " << hexa(hr);
- }
-
- if (aSurface->GetFormat() != SurfaceFormat::A8) {
- D2D1_POINT_2F imgPoint = D2DPoint(aDest);
- mDC->DrawImage(image, &imgPoint, nullptr, D2D1_INTERPOLATION_MODE_LINEAR,
- D2D1_COMPOSITE_MODE_SOURCE_OVER);
- }
-
- FinalizeDrawing(aOperator, ColorPattern(aShadow.mColor));
-}
-
-void DrawTargetD2D1::ClearRect(const Rect& aRect) {
- if (!EnsureInitialized()) {
- return;
- }
-
- if (aRect.IsEmpty()) {
- // Nothing to be done.
- return;
- }
-
- MarkChanged();
-
- PopAllClips();
-
- PushClipRect(aRect);
-
- if (mTransformDirty || !mTransform.IsIdentity()) {
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
- }
-
- D2D1_RECT_F clipRect;
- bool isPixelAligned;
- if (mTransform.IsRectilinear() &&
- GetDeviceSpaceClipRect(clipRect, isPixelAligned)) {
- mDC->PushAxisAlignedClip(clipRect, isPixelAligned
- ? D2D1_ANTIALIAS_MODE_ALIASED
- : D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
- mDC->Clear();
- mDC->PopAxisAlignedClip();
-
- PopClip();
- return;
- }
-
- RefPtr<ID2D1CommandList> list;
- mUsedCommandListsSincePurge++;
- mDC->CreateCommandList(getter_AddRefs(list));
- mDC->SetTarget(list);
-
- IntRect addClipRect;
- RefPtr<ID2D1Geometry> geom = GetClippedGeometry(&addClipRect);
-
- RefPtr<ID2D1SolidColorBrush> brush;
- mDC->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White),
- getter_AddRefs(brush));
- mDC->PushAxisAlignedClip(
- D2D1::RectF(addClipRect.X(), addClipRect.Y(), addClipRect.XMost(),
- addClipRect.YMost()),
- D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
- mDC->FillGeometry(geom, brush);
- mDC->PopAxisAlignedClip();
-
- mDC->SetTarget(CurrentTarget());
- list->Close();
-
- mDC->DrawImage(list, D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2D1_COMPOSITE_MODE_DESTINATION_OUT);
-
- PopClip();
-
- return;
-}
-
-void DrawTargetD2D1::MaskSurface(const Pattern& aSource, SourceSurface* aMask,
- Point aOffset, const DrawOptions& aOptions) {
- if (!EnsureInitialized()) {
- return;
- }
- MarkChanged();
-
- RefPtr<ID2D1Bitmap> bitmap;
-
- Matrix mat = Matrix::Translation(aOffset);
- RefPtr<ID2D1Image> image =
- GetImageForSurface(aMask, mat, ExtendMode::CLAMP, nullptr);
-
- MOZ_ASSERT(!mat.HasNonTranslation());
- aOffset.x = mat._31;
- aOffset.y = mat._32;
-
- if (!image) {
- gfxWarning() << "Failed to get image for surface.";
- return;
- }
-
- if (!PrepareForDrawing(aOptions.mCompositionOp, aSource)) {
- return;
- }
-
- IntSize size =
- IntSize::Truncate(aMask->GetSize().width, aMask->GetSize().height);
- Rect dest =
- Rect(aOffset.x + aMask->GetRect().x, aOffset.y + aMask->GetRect().y,
- Float(size.width), Float(size.height));
-
- HRESULT hr = image->QueryInterface((ID2D1Bitmap**)getter_AddRefs(bitmap));
- if (!bitmap || FAILED(hr)) {
- // D2D says if we have an actual ID2D1Image and not a bitmap underlying the
- // object, we can't query for a bitmap. Instead, Push/PopLayer
- gfxWarning() << "FillOpacityMask only works with Bitmap source surfaces. "
- "Falling back to push/pop layer";
-
- RefPtr<ID2D1Brush> source = CreateBrushForPattern(aSource, aOptions);
- RefPtr<ID2D1ImageBrush> maskBrush;
- hr = mDC->CreateImageBrush(
- image,
- D2D1::ImageBrushProperties(D2D1::RectF(0, 0, size.width, size.height)),
- D2D1::BrushProperties(
- 1.0f, D2D1::Matrix3x2F::Translation(aMask->GetRect().x,
- aMask->GetRect().y)),
- getter_AddRefs(maskBrush));
- MOZ_ASSERT(SUCCEEDED(hr));
-
- mDC->PushLayer(
- D2D1::LayerParameters1(D2D1::InfiniteRect(), nullptr,
- D2D1_ANTIALIAS_MODE_PER_PRIMITIVE,
- D2D1::Matrix3x2F::Translation(
- aMask->GetRect().x, aMask->GetRect().y),
- 1.0f, maskBrush, D2D1_LAYER_OPTIONS1_NONE),
- nullptr);
-
- mDC->FillRectangle(D2DRect(dest), source);
- mDC->PopLayer();
-
- FinalizeDrawing(aOptions.mCompositionOp, aSource);
- return;
- } else {
- // If this is a data source surface, we might have created a partial bitmap
- // for this surface and only uploaded part of the mask. In that case,
- // we have to fixup our sizes here.
- size.width = bitmap->GetSize().width;
- size.height = bitmap->GetSize().height;
- dest.SetWidth(size.width);
- dest.SetHeight(size.height);
- }
-
- // FillOpacityMask only works if the antialias mode is MODE_ALIASED
- mDC->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
-
- Rect maskRect = Rect(aMask->GetRect().x, aMask->GetRect().y,
- Float(size.width), Float(size.height));
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aSource, aOptions);
- mDC->FillOpacityMask(bitmap, brush, D2D1_OPACITY_MASK_CONTENT_GRAPHICS,
- D2DRect(dest), D2DRect(maskRect));
-
- mDC->SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
-
- FinalizeDrawing(aOptions.mCompositionOp, aSource);
-}
-
-void DrawTargetD2D1::CopySurface(SourceSurface* aSurface,
- const IntRect& aSourceRect,
- const IntPoint& aDestination) {
- if (!EnsureInitialized()) {
- return;
- }
- MarkChanged();
-
- PopAllClips();
-
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- Matrix mat = Matrix::Translation(aDestination - aSourceRect.TopLeft() +
- aSurface->GetRect().TopLeft());
- RefPtr<ID2D1Image> image =
- GetImageForSurface(aSurface, mat, ExtendMode::CLAMP, nullptr, false);
-
- if (!image) {
- gfxWarning() << "Couldn't get image for surface.";
- return;
- }
-
- if (mat.HasNonIntegerTranslation()) {
- gfxDebug() << *this
- << ": At this point scaled partial uploads are not supported "
- "for CopySurface.";
- return;
- }
-
- IntRect srcRect(aDestination - IntPoint::Round(mat.GetTranslation()),
- aSourceRect.Size());
- IntRect dstRect(aDestination, aSourceRect.Size());
-
- RefPtr<ID2D1Bitmap> bitmap;
- HRESULT hr = image->QueryInterface((ID2D1Bitmap**)getter_AddRefs(bitmap));
-
- if (SUCCEEDED(hr) && bitmap && mFormat == SurfaceFormat::A8) {
- RefPtr<ID2D1SolidColorBrush> brush;
- mDC->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White),
- D2D1::BrushProperties(), getter_AddRefs(brush));
- mDC->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_COPY);
- mDC->FillOpacityMask(bitmap, brush, D2D1_OPACITY_MASK_CONTENT_GRAPHICS);
- mDC->SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_SOURCE_OVER);
- return;
- }
-
- if (SUCCEEDED(hr) && bitmap) {
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_COPY);
- mDC->DrawBitmap(bitmap, D2DRect(dstRect), 1.0f,
- D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2DRect(srcRect));
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_SOURCE_OVER);
- return;
- }
-
- mDC->DrawImage(image, D2DPoint(aDestination), D2DRect(srcRect),
- D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY);
-}
-
-void DrawTargetD2D1::FillRect(const Rect& aRect, const Pattern& aPattern,
- const DrawOptions& aOptions) {
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
- mDC->FillRectangle(D2DRect(aRect), brush);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::FillRoundedRect(const RoundedRect& aRect,
- const Pattern& aPattern,
- const DrawOptions& aOptions) {
- if (!aRect.corners.AreRadiiSame()) {
- return DrawTarget::FillRoundedRect(aRect, aPattern, aOptions);
- }
-
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
- mDC->FillRoundedRectangle(D2DRoundedRect(aRect), brush);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::StrokeRect(const Rect& aRect, const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions,
- const DrawOptions& aOptions) {
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
- RefPtr<ID2D1StrokeStyle> strokeStyle =
- CreateStrokeStyleForOptions(aStrokeOptions);
-
- mDC->DrawRectangle(D2DRect(aRect), brush, aStrokeOptions.mLineWidth,
- strokeStyle);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::StrokeLine(const Point& aStart, const Point& aEnd,
- const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions,
- const DrawOptions& aOptions) {
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
- RefPtr<ID2D1StrokeStyle> strokeStyle =
- CreateStrokeStyleForOptions(aStrokeOptions);
-
- mDC->DrawLine(D2DPoint(aStart), D2DPoint(aEnd), brush,
- aStrokeOptions.mLineWidth, strokeStyle);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-void DrawTargetD2D1::StrokeCircle(const Point& aOrigin, float radius,
- const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions,
- const DrawOptions& aOptions) {
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
- RefPtr<ID2D1StrokeStyle> strokeStyle =
- CreateStrokeStyleForOptions(aStrokeOptions);
-
- mDC->DrawEllipse(D2D1::Ellipse(D2DPoint(aOrigin), radius, radius), brush,
- aStrokeOptions.mLineWidth, strokeStyle);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::FillCircle(const Point& aOrigin, float radius,
- const Pattern& aPattern,
- const DrawOptions& aOptions) {
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
-
- mDC->FillEllipse(D2D1::Ellipse(D2DPoint(aOrigin), radius, radius), brush);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::Stroke(const Path* aPath, const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions,
- const DrawOptions& aOptions) {
- const Path* path = aPath;
- if (path->GetBackendType() != BackendType::DIRECT2D1_1) {
- gfxDebug() << *this << ": Ignoring drawing call for incompatible path.";
- return;
- }
- const PathD2D* d2dPath = static_cast<const PathD2D*>(path);
-
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
- RefPtr<ID2D1StrokeStyle> strokeStyle =
- CreateStrokeStyleForOptions(aStrokeOptions);
-
- mDC->DrawGeometry(d2dPath->mGeometry, brush, aStrokeOptions.mLineWidth,
- strokeStyle);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::Fill(const Path* aPath, const Pattern& aPattern,
- const DrawOptions& aOptions) {
- const Path* path = aPath;
- if (!path || path->GetBackendType() != BackendType::DIRECT2D1_1) {
- gfxDebug() << *this << ": Ignoring drawing call for incompatible path.";
- return;
- }
- const PathD2D* d2dPath = static_cast<const PathD2D*>(path);
-
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- mDC->SetAntialiasMode(D2DAAMode(aOptions.mAntialiasMode));
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
-
- mDC->FillGeometry(d2dPath->mGeometry, brush);
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::FillGlyphs(ScaledFont* aFont, const GlyphBuffer& aBuffer,
- const Pattern& aPattern,
- const DrawOptions& aOptions) {
- if (aFont->GetType() != FontType::DWRITE) {
- gfxDebug() << *this << ": Ignoring drawing call for incompatible font.";
- return;
- }
-
- ScaledFontDWrite* font = static_cast<ScaledFontDWrite*>(aFont);
-
- // May be null, if we failed to initialize the default rendering params.
- RefPtr<IDWriteRenderingParams> params =
- font->DWriteSettings().RenderingParams();
-
- AntialiasMode aaMode = font->GetDefaultAAMode();
-
- if (aOptions.mAntialiasMode != AntialiasMode::DEFAULT) {
- aaMode = aOptions.mAntialiasMode;
- }
-
- if (!PrepareForDrawing(aOptions.mCompositionOp, aPattern)) {
- return;
- }
-
- bool forceClearType = false;
- if (!CurrentLayer().mIsOpaque && mPermitSubpixelAA &&
- aOptions.mCompositionOp == CompositionOp::OP_OVER &&
- aaMode == AntialiasMode::SUBPIXEL) {
- forceClearType = true;
- }
-
- D2D1_TEXT_ANTIALIAS_MODE d2dAAMode = D2D1_TEXT_ANTIALIAS_MODE_DEFAULT;
-
- switch (aaMode) {
- case AntialiasMode::NONE:
- d2dAAMode = D2D1_TEXT_ANTIALIAS_MODE_ALIASED;
- break;
- case AntialiasMode::GRAY:
- d2dAAMode = D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE;
- break;
- case AntialiasMode::SUBPIXEL:
- d2dAAMode = D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE;
- break;
- default:
- d2dAAMode = D2D1_TEXT_ANTIALIAS_MODE_DEFAULT;
- }
-
- if (d2dAAMode == D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE &&
- !CurrentLayer().mIsOpaque && !forceClearType) {
- d2dAAMode = D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE;
- }
-
- mDC->SetTextAntialiasMode(d2dAAMode);
-
- if (params != mTextRenderingParams) {
- // According to
- // https://docs.microsoft.com/en-us/windows/win32/api/d2d1/nf-d2d1-id2d1rendertarget-settextrenderingparams
- // it's OK to pass null for params here; it will just "clear current text
- // rendering options".
- mDC->SetTextRenderingParams(params);
- mTextRenderingParams = params;
- }
-
- RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions);
-
- AutoDWriteGlyphRun autoRun;
- DWriteGlyphRunFromGlyphs(aBuffer, font, &autoRun);
-
- bool needsRepushedLayers = false;
- if (forceClearType) {
- D2D1_RECT_F rect;
- bool isAligned;
- needsRepushedLayers = CurrentLayer().mPushedClips.size() &&
- !GetDeviceSpaceClipRect(rect, isAligned);
-
- // If we have a complex clip in our stack and we have a transparent
- // background, and subpixel AA is permitted, we need to repush our layer
- // stack limited by the glyph run bounds initializing our layers for
- // subpixel AA.
- if (needsRepushedLayers) {
- mDC->GetGlyphRunWorldBounds(D2D1::Point2F(), &autoRun,
- DWRITE_MEASURING_MODE_NATURAL, &rect);
- rect.left = std::floor(rect.left);
- rect.right = std::ceil(rect.right);
- rect.top = std::floor(rect.top);
- rect.bottom = std::ceil(rect.bottom);
-
- PopAllClips();
-
- if (!mTransform.IsRectilinear()) {
- // We must limit the pixels we touch to the -user space- bounds of
- // the glyphs being drawn. In order not to get transparent pixels
- // copied up in our pushed layer stack.
- D2D1_RECT_F userRect;
- mDC->SetTransform(D2D1::IdentityMatrix());
- mDC->GetGlyphRunWorldBounds(D2D1::Point2F(), &autoRun,
- DWRITE_MEASURING_MODE_NATURAL, &userRect);
-
- RefPtr<ID2D1PathGeometry> path;
- factory()->CreatePathGeometry(getter_AddRefs(path));
- RefPtr<ID2D1GeometrySink> sink;
- path->Open(getter_AddRefs(sink));
- AddRectToSink(sink, userRect);
- sink->Close();
-
- mDC->PushLayer(
- D2D1::LayerParameters1(
- D2D1::InfiniteRect(), path, D2D1_ANTIALIAS_MODE_ALIASED,
- D2DMatrix(mTransform), 1.0f, nullptr,
- D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND |
- D2D1_LAYER_OPTIONS1_IGNORE_ALPHA),
- nullptr);
- }
-
- PushClipsToDC(mDC, true, rect);
- mDC->SetTransform(D2DMatrix(mTransform));
- }
- }
-
- if (brush) {
- mDC->DrawGlyphRun(D2D1::Point2F(), &autoRun, brush);
- }
-
- if (mTransform.HasNonTranslation()) {
- mTransformedGlyphsSinceLastPurge += aBuffer.mNumGlyphs;
- }
-
- if (needsRepushedLayers) {
- PopClipsFromDC(mDC);
-
- if (!mTransform.IsRectilinear()) {
- mDC->PopLayer();
- }
- }
-
- FinalizeDrawing(aOptions.mCompositionOp, aPattern);
-}
-
-void DrawTargetD2D1::Mask(const Pattern& aSource, const Pattern& aMask,
- const DrawOptions& aOptions) {
- if (!PrepareForDrawing(aOptions.mCompositionOp, aSource)) {
- return;
- }
-
- RefPtr<ID2D1Brush> source = CreateBrushForPattern(aSource, aOptions);
- RefPtr<ID2D1Brush> mask = CreateBrushForPattern(aMask, DrawOptions());
- mDC->PushLayer(D2D1::LayerParameters(D2D1::InfiniteRect(), nullptr,
- D2D1_ANTIALIAS_MODE_PER_PRIMITIVE,
- D2D1::IdentityMatrix(), 1.0f, mask),
- nullptr);
-
- Rect rect(0, 0, (Float)mSize.width, (Float)mSize.height);
- Matrix mat = mTransform;
- mat.Invert();
-
- mDC->FillRectangle(D2DRect(mat.TransformBounds(rect)), source);
-
- mDC->PopLayer();
-
- FinalizeDrawing(aOptions.mCompositionOp, aSource);
-}
-
-void DrawTargetD2D1::PushClipGeometry(ID2D1Geometry* aGeometry,
- const D2D1_MATRIX_3X2_F& aTransform,
- bool aPixelAligned) {
- mCurrentClippedGeometry = nullptr;
-
- PushedClip clip;
- clip.mGeometry = aGeometry;
- clip.mTransform = aTransform;
- clip.mIsPixelAligned = aPixelAligned;
-
- aGeometry->GetBounds(aTransform, &clip.mBounds);
-
- CurrentLayer().mPushedClips.push_back(clip);
-
- // The transform of clips is relative to the world matrix, since we use the
- // total transform for the clips, make the world matrix identity.
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- if (CurrentLayer().mClipsArePushed) {
- PushD2DLayer(mDC, clip.mGeometry, clip.mTransform, clip.mIsPixelAligned);
- }
-}
-
-void DrawTargetD2D1::PushClip(const Path* aPath) {
- const Path* path = aPath;
- if (path->GetBackendType() != BackendType::DIRECT2D1_1) {
- gfxDebug() << *this << ": Ignoring clipping call for incompatible path.";
- return;
- }
- if (!EnsureInitialized()) {
- return;
- }
-
- RefPtr<PathD2D> pathD2D = static_cast<PathD2D*>(const_cast<Path*>(path));
-
- PushClipGeometry(pathD2D->GetGeometry(), D2DMatrix(mTransform));
-}
-
-void DrawTargetD2D1::PushClipRect(const Rect& aRect) {
- if (!EnsureInitialized()) {
- return;
- }
- if (!mTransform.IsRectilinear()) {
- // Whoops, this isn't a rectangle in device space, Direct2D will not deal
- // with this transform the way we want it to.
- // See remarks:
- // http://msdn.microsoft.com/en-us/library/dd316860%28VS.85%29.aspx
- RefPtr<ID2D1Geometry> geom = ConvertRectToGeometry(D2DRect(aRect));
- return PushClipGeometry(geom, D2DMatrix(mTransform));
- }
-
- mCurrentClippedGeometry = nullptr;
-
- PushedClip clip;
- Rect rect = mTransform.TransformBounds(aRect);
- IntRect intRect;
- clip.mIsPixelAligned = rect.ToIntRect(&intRect);
-
- // Do not store the transform, just store the device space rectangle directly.
- clip.mBounds = D2DRect(rect);
-
- CurrentLayer().mPushedClips.push_back(clip);
-
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- if (CurrentLayer().mClipsArePushed) {
- mDC->PushAxisAlignedClip(
- clip.mBounds, clip.mIsPixelAligned ? D2D1_ANTIALIAS_MODE_ALIASED
- : D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
- }
-}
-
-void DrawTargetD2D1::PushDeviceSpaceClipRects(const IntRect* aRects,
- uint32_t aCount) {
- if (!EnsureInitialized()) {
- return;
- }
- // Build a path for the union of the rects.
- RefPtr<ID2D1PathGeometry> path;
- factory()->CreatePathGeometry(getter_AddRefs(path));
- RefPtr<ID2D1GeometrySink> sink;
- path->Open(getter_AddRefs(sink));
- sink->SetFillMode(D2D1_FILL_MODE_WINDING);
- for (uint32_t i = 0; i < aCount; i++) {
- const IntRect& rect = aRects[i];
- sink->BeginFigure(D2DPoint(rect.TopLeft()), D2D1_FIGURE_BEGIN_FILLED);
- D2D1_POINT_2F lines[3] = {D2DPoint(rect.TopRight()),
- D2DPoint(rect.BottomRight()),
- D2DPoint(rect.BottomLeft())};
- sink->AddLines(lines, 3);
- sink->EndFigure(D2D1_FIGURE_END_CLOSED);
- }
- sink->Close();
-
- // The path is in device-space, so there is no transform needed,
- // and all rects are pixel aligned.
- PushClipGeometry(path, D2D1::IdentityMatrix(), true);
-}
-
-void DrawTargetD2D1::PopClip() {
- if (!EnsureInitialized()) {
- return;
- }
- mCurrentClippedGeometry = nullptr;
- if (CurrentLayer().mPushedClips.empty()) {
- gfxDevCrash(LogReason::UnbalancedClipStack)
- << "DrawTargetD2D1::PopClip: No clip to pop.";
- return;
- }
-
- if (CurrentLayer().mClipsArePushed) {
- if (CurrentLayer().mPushedClips.back().mGeometry) {
- mDC->PopLayer();
- } else {
- mDC->PopAxisAlignedClip();
- }
- }
- CurrentLayer().mPushedClips.pop_back();
-}
-
-bool DrawTargetD2D1::RemoveAllClips() {
- if (!EnsureInitialized()) {
- return false;
- }
- mCurrentClippedGeometry = nullptr;
- while (!CurrentLayer().mPushedClips.empty()) {
- PopClip();
- }
- return true;
-}
-
-void DrawTargetD2D1::PushLayer(bool aOpaque, Float aOpacity,
- SourceSurface* aMask,
- const Matrix& aMaskTransform,
- const IntRect& aBounds, bool aCopyBackground) {
- if (!EnsureInitialized()) {
- return;
- }
- D2D1_LAYER_OPTIONS1 options = D2D1_LAYER_OPTIONS1_NONE;
-
- if (aOpaque) {
- options |= D2D1_LAYER_OPTIONS1_IGNORE_ALPHA;
- }
- if (aCopyBackground) {
- options |= D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND;
- }
-
- RefPtr<ID2D1ImageBrush> mask;
- Matrix maskTransform = aMaskTransform;
- RefPtr<ID2D1PathGeometry> clip;
-
- if (aMask) {
- RefPtr<ID2D1Image> image =
- GetImageForSurface(aMask, maskTransform, ExtendMode::CLAMP);
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- maskTransform =
- maskTransform.PreTranslate(aMask->GetRect().X(), aMask->GetRect().Y());
- // The mask is given in user space. Our layer will apply it in device space.
- maskTransform = maskTransform * mTransform;
-
- if (image) {
- IntSize maskSize = aMask->GetSize();
- HRESULT hr = mDC->CreateImageBrush(
- image,
- D2D1::ImageBrushProperties(
- D2D1::RectF(0, 0, maskSize.width, maskSize.height)),
- D2D1::BrushProperties(1.0f, D2DMatrix(maskTransform)),
- getter_AddRefs(mask));
- if (FAILED(hr)) {
- gfxWarning() << "[D2D1.1] Failed to create a ImageBrush, code: "
- << hexa(hr);
- }
-
- factory()->CreatePathGeometry(getter_AddRefs(clip));
- RefPtr<ID2D1GeometrySink> sink;
- clip->Open(getter_AddRefs(sink));
- AddRectToSink(sink, D2D1::RectF(0, 0, aMask->GetSize().width,
- aMask->GetSize().height));
- sink->Close();
- } else {
- gfxCriticalError() << "Failed to get image for mask surface!";
- }
- }
-
- PushAllClips();
-
- mDC->PushLayer(D2D1::LayerParameters1(
- D2D1::InfiniteRect(), clip, D2D1_ANTIALIAS_MODE_ALIASED,
- D2DMatrix(maskTransform), aOpacity, mask, options),
- nullptr);
- PushedLayer pushedLayer;
- pushedLayer.mClipsArePushed = false;
- pushedLayer.mIsOpaque = aOpaque;
- pushedLayer.mOldPermitSubpixelAA = mPermitSubpixelAA;
- mPermitSubpixelAA = aOpaque;
-
- mDC->CreateCommandList(getter_AddRefs(pushedLayer.mCurrentList));
- mPushedLayers.push_back(pushedLayer);
-
- mDC->SetTarget(CurrentTarget());
-
- mUsedCommandListsSincePurge++;
-}
-
-void DrawTargetD2D1::PopLayer() {
- // We must have at least one layer at all times.
- MOZ_ASSERT(mPushedLayers.size() > 1);
- MOZ_ASSERT(CurrentLayer().mPushedClips.size() == 0);
- if (!EnsureInitialized() || mPushedLayers.size() <= 1) {
- return;
- }
- RefPtr<ID2D1CommandList> list = CurrentLayer().mCurrentList;
- mPermitSubpixelAA = CurrentLayer().mOldPermitSubpixelAA;
-
- mPushedLayers.pop_back();
- mDC->SetTarget(CurrentTarget());
-
- list->Close();
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- DCCommandSink sink(mDC);
- list->Stream(&sink);
-
- mComplexBlendsWithListInList = 0;
-
- mDC->PopLayer();
-}
-
-already_AddRefed<SourceSurface> DrawTargetD2D1::CreateSourceSurfaceFromData(
- unsigned char* aData, const IntSize& aSize, int32_t aStride,
- SurfaceFormat aFormat) const {
- RefPtr<ID2D1Bitmap1> bitmap;
-
- RefPtr<ID2D1DeviceContext> dc = Factory::GetD2DDeviceContext();
- if (!dc) {
- return nullptr;
- }
-
- HRESULT hr =
- dc->CreateBitmap(D2DIntSize(aSize), aData, aStride,
- D2D1::BitmapProperties1(D2D1_BITMAP_OPTIONS_NONE,
- D2DPixelFormat(aFormat)),
- getter_AddRefs(bitmap));
-
- if (FAILED(hr) || !bitmap) {
- gfxCriticalError(
- CriticalLog::DefaultOptions(Factory::ReasonableSurfaceSize(aSize)))
- << "[D2D1.1] 1CreateBitmap failure " << aSize << " Code: " << hexa(hr)
- << " format " << (int)aFormat;
- return nullptr;
- }
-
- return MakeAndAddRef<SourceSurfaceD2D1>(bitmap.get(), dc.get(), aFormat,
- aSize);
-}
-
-already_AddRefed<DrawTarget> DrawTargetD2D1::CreateSimilarDrawTarget(
- const IntSize& aSize, SurfaceFormat aFormat) const {
- RefPtr<DrawTargetD2D1> dt = new DrawTargetD2D1();
-
- if (!dt->Init(aSize, aFormat)) {
- return nullptr;
- }
-
- return dt.forget();
-}
-
-bool DrawTargetD2D1::CanCreateSimilarDrawTarget(const IntSize& aSize,
- SurfaceFormat aFormat) const {
- RefPtr<ID2D1DeviceContext> dc = Factory::GetD2DDeviceContext();
- if (!dc) {
- return false;
- }
- return (dc->GetMaximumBitmapSize() >= UINT32(aSize.width) &&
- dc->GetMaximumBitmapSize() >= UINT32(aSize.height));
-}
-
-RefPtr<DrawTarget> DrawTargetD2D1::CreateClippedDrawTarget(
- const Rect& aBounds, SurfaceFormat aFormat) {
- RefPtr<DrawTarget> result;
-
- if (!aBounds.IsEmpty()) {
- PushClipRect(aBounds);
- }
-
- D2D1_RECT_F clipRect;
- bool isAligned;
- GetDeviceSpaceClipRect(clipRect, isAligned);
- IntRect rect = RoundedOut(ToRect(clipRect));
-
- RefPtr<DrawTarget> dt = CreateSimilarDrawTarget(rect.Size(), aFormat);
- if (dt) {
- result = gfx::Factory::CreateOffsetDrawTarget(dt, rect.TopLeft());
- if (result) {
- result->SetTransform(mTransform);
- }
- }
- if (!aBounds.IsEmpty()) {
- PopClip();
- }
-
- return result;
-}
-
-already_AddRefed<GradientStops> DrawTargetD2D1::CreateGradientStops(
- GradientStop* rawStops, uint32_t aNumStops, ExtendMode aExtendMode) const {
- if (aNumStops == 0) {
- gfxWarning() << *this
- << ": Failed to create GradientStopCollection with no stops.";
- return nullptr;
- }
-
- D2D1_GRADIENT_STOP* stops = new D2D1_GRADIENT_STOP[aNumStops];
-
- for (uint32_t i = 0; i < aNumStops; i++) {
- stops[i].position = rawStops[i].offset;
- stops[i].color = D2DColor(rawStops[i].color);
- }
-
- RefPtr<ID2D1GradientStopCollection1> stopCollection;
-
- RefPtr<ID2D1DeviceContext> dc = Factory::GetD2DDeviceContext();
-
- if (!dc) {
- return nullptr;
- }
-
- HRESULT hr = dc->CreateGradientStopCollection(
- stops, aNumStops, D2D1_COLOR_SPACE_SRGB, D2D1_COLOR_SPACE_SRGB,
- D2D1_BUFFER_PRECISION_8BPC_UNORM, D2DExtend(aExtendMode, Axis::BOTH),
- D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED,
- getter_AddRefs(stopCollection));
- delete[] stops;
-
- if (FAILED(hr)) {
- gfxWarning() << *this << ": Failed to create GradientStopCollection. Code: "
- << hexa(hr);
- return nullptr;
- }
-
- RefPtr<ID3D11Device> device = Factory::GetDirect3D11Device();
- return MakeAndAddRef<GradientStopsD2D>(stopCollection, device);
-}
-
-already_AddRefed<FilterNode> DrawTargetD2D1::CreateFilter(FilterType aType) {
- if (!EnsureInitialized()) {
- return nullptr;
- }
- return FilterNodeD2D1::Create(mDC, aType);
-}
-
-bool DrawTargetD2D1::Init(ID3D11Texture2D* aTexture, SurfaceFormat aFormat) {
- RefPtr<ID2D1Device> device = Factory::GetD2D1Device(&mDeviceSeq);
- if (!device) {
- gfxCriticalNote << "[D2D1.1] Failed to obtain a device for "
- "DrawTargetD2D1::Init(ID3D11Texture2D*, SurfaceFormat).";
- return false;
- }
-
- aTexture->QueryInterface(__uuidof(IDXGISurface),
- (void**)((IDXGISurface**)getter_AddRefs(mSurface)));
- if (!mSurface) {
- gfxCriticalError() << "[D2D1.1] Failed to obtain a DXGI surface.";
- return false;
- }
-
- mFormat = aFormat;
-
- D3D11_TEXTURE2D_DESC desc;
- aTexture->GetDesc(&desc);
- mSize.width = desc.Width;
- mSize.height = desc.Height;
-
- return true;
-}
-
-bool DrawTargetD2D1::Init(const IntSize& aSize, SurfaceFormat aFormat) {
- RefPtr<ID2D1Device> device = Factory::GetD2D1Device(&mDeviceSeq);
- if (!device) {
- gfxCriticalNote << "[D2D1.1] Failed to obtain a device for "
- "DrawTargetD2D1::Init(IntSize, SurfaceFormat).";
- return false;
- }
-
- if (!CanCreateSimilarDrawTarget(aSize, aFormat)) {
- // Size unsupported.
- return false;
- }
-
- mFormat = aFormat;
- mSize = aSize;
-
- return true;
-}
-
-/**
- * Private helpers.
- */
-uint32_t DrawTargetD2D1::GetByteSize() const {
- return mSize.width * mSize.height * BytesPerPixel(mFormat);
-}
-
-RefPtr<ID2D1Factory1> DrawTargetD2D1::factory() {
- StaticMutexAutoLock lock(Factory::mDeviceLock);
-
- if (mFactory || !NS_IsMainThread()) {
- return mFactory;
- }
-
- // We don't allow initializing the factory off the main thread.
- MOZ_RELEASE_ASSERT(NS_IsMainThread());
-
- RefPtr<ID2D1Factory> factory;
- D2D1CreateFactoryFunc createD2DFactory;
- HMODULE d2dModule = LoadLibraryW(L"d2d1.dll");
- createD2DFactory =
- (D2D1CreateFactoryFunc)GetProcAddress(d2dModule, "D2D1CreateFactory");
-
- if (!createD2DFactory) {
- gfxWarning() << "Failed to locate D2D1CreateFactory function.";
- return nullptr;
- }
-
- D2D1_FACTORY_OPTIONS options;
-#ifdef _DEBUG
- options.debugLevel = D2D1_DEBUG_LEVEL_WARNING;
-#else
- options.debugLevel = D2D1_DEBUG_LEVEL_NONE;
-#endif
- // options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;
-
- HRESULT hr =
- createD2DFactory(D2D1_FACTORY_TYPE_MULTI_THREADED, __uuidof(ID2D1Factory),
- &options, getter_AddRefs(factory));
-
- if (FAILED(hr) || !factory) {
- gfxCriticalNote << "Failed to create a D2D1 content device: " << hexa(hr);
- return nullptr;
- }
-
- RefPtr<ID2D1Factory1> factory1;
- hr = factory->QueryInterface(__uuidof(ID2D1Factory1),
- getter_AddRefs(factory1));
- if (FAILED(hr) || !factory1) {
- return nullptr;
- }
-
- mFactory = factory1;
-
- ExtendInputEffectD2D1::Register(mFactory);
- ConicGradientEffectD2D1::Register(mFactory);
- RadialGradientEffectD2D1::Register(mFactory);
-
- return mFactory;
-}
-
-void DrawTargetD2D1::CleanupD2D() {
- MOZ_RELEASE_ASSERT(NS_IsMainThread());
- Factory::mDeviceLock.AssertCurrentThreadOwns();
-
- if (mFactory) {
- RadialGradientEffectD2D1::Unregister(mFactory);
- ConicGradientEffectD2D1::Unregister(mFactory);
- ExtendInputEffectD2D1::Unregister(mFactory);
- mFactory = nullptr;
- }
-}
-
-void DrawTargetD2D1::FlushInternal(bool aHasDependencyMutex /* = false */) {
- if (IsDeviceContextValid()) {
- if ((mUsedCommandListsSincePurge >= kPushedLayersBeforePurge ||
- mTransformedGlyphsSinceLastPurge >= kTransformedGlyphsBeforePurge) &&
- mPushedLayers.size() == 1) {
- // It's important to pop all clips as otherwise layers can forget about
- // their clip when doing an EndDraw. When we have layers pushed we cannot
- // easily pop all underlying clips to delay the purge until we have no
- // layers pushed.
- PopAllClips();
- mUsedCommandListsSincePurge = 0;
- mTransformedGlyphsSinceLastPurge = 0;
- mDC->EndDraw();
- mDC->BeginDraw();
- } else {
- mDC->Flush();
- }
- }
-
- Maybe<StaticMutexAutoLock> lock;
-
- if (!aHasDependencyMutex) {
- lock.emplace(Factory::mDTDependencyLock);
- }
-
- Factory::mDTDependencyLock.AssertCurrentThreadOwns();
- // We no longer depend on any target.
- for (TargetSet::iterator iter = mDependingOnTargets.begin();
- iter != mDependingOnTargets.end(); iter++) {
- (*iter)->mDependentTargets.erase(this);
- }
- mDependingOnTargets.clear();
-}
-
-bool DrawTargetD2D1::EnsureInitialized() {
- if (mInitState != InitState::Uninitialized) {
- return mInitState == InitState::Success;
- }
-
- // Don't retry.
- mInitState = InitState::Failure;
-
- HRESULT hr;
-
- RefPtr<ID2D1Device> device = Factory::GetD2D1Device(&mDeviceSeq);
- if (!device) {
- gfxCriticalNote << "[D2D1.1] Failed to obtain a device for "
- "DrawTargetD2D1::EnsureInitialized().";
- return false;
- }
-
- hr = device->CreateDeviceContext(
- D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS,
- getter_AddRefs(mDC));
-
- if (FAILED(hr)) {
- gfxCriticalError() << "[D2D1.1] 2Failed to create a DeviceContext, code: "
- << hexa(hr) << " format " << (int)mFormat;
- return false;
- }
-
- if (!mSurface) {
- if (mDC->GetMaximumBitmapSize() < UINT32(mSize.width) ||
- mDC->GetMaximumBitmapSize() < UINT32(mSize.height)) {
- // This is 'ok', so don't assert
- gfxCriticalNote << "[D2D1.1] Attempt to use unsupported surface size "
- << mSize;
- return false;
- }
-
- D2D1_BITMAP_PROPERTIES1 props;
- props.dpiX = 96;
- props.dpiY = 96;
- props.pixelFormat = D2DPixelFormat(mFormat);
- props.colorContext = nullptr;
- props.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET;
- hr = mDC->CreateBitmap(D2DIntSize(mSize), nullptr, 0, props,
- (ID2D1Bitmap1**)getter_AddRefs(mBitmap));
-
- if (FAILED(hr)) {
- gfxCriticalError() << "[D2D1.1] 3CreateBitmap failure " << mSize
- << " Code: " << hexa(hr) << " format " << (int)mFormat;
- return false;
- }
- } else {
- D2D1_BITMAP_PROPERTIES1 props;
- props.dpiX = 96;
- props.dpiY = 96;
- props.pixelFormat = D2DPixelFormat(mFormat);
- props.colorContext = nullptr;
- props.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET;
- hr = mDC->CreateBitmapFromDxgiSurface(
- mSurface, props, (ID2D1Bitmap1**)getter_AddRefs(mBitmap));
-
- if (FAILED(hr)) {
- gfxCriticalError()
- << "[D2D1.1] CreateBitmapFromDxgiSurface failure Code: " << hexa(hr)
- << " format " << (int)mFormat;
- return false;
- }
- }
-
- mDC->SetTarget(CurrentTarget());
-
- hr = mDC->CreateSolidColorBrush(D2D1::ColorF(0, 0),
- getter_AddRefs(mSolidColorBrush));
-
- if (FAILED(hr)) {
- gfxCriticalError() << "[D2D1.1] Failure creating solid color brush (I2).";
- return false;
- }
-
- mDC->BeginDraw();
-
- CurrentLayer().mIsOpaque = mFormat == SurfaceFormat::B8G8R8X8;
-
- if (!mSurface) {
- mDC->Clear();
- }
-
- mInitState = InitState::Success;
-
- return true;
-}
-
-void DrawTargetD2D1::MarkChanged() {
- if (mSnapshot) {
- MutexAutoLock lock(*mSnapshotLock);
- if (mSnapshot->hasOneRef()) {
- // Just destroy it, since no-one else knows about it.
- mSnapshot = nullptr;
- } else {
- mSnapshot->DrawTargetWillChange();
- // The snapshot will no longer depend on this target.
- MOZ_ASSERT(!mSnapshot);
- }
- }
-
- {
- StaticMutexAutoLock lock(Factory::mDTDependencyLock);
- if (mDependentTargets.size()) {
- // Copy mDependentTargets since the Flush()es below will modify it.
- TargetSet tmpTargets = mDependentTargets;
- for (TargetSet::iterator iter = tmpTargets.begin();
- iter != tmpTargets.end(); iter++) {
- (*iter)->FlushInternal(true);
- }
- // The Flush() should have broken all dependencies on this target.
- MOZ_ASSERT(!mDependentTargets.size());
- }
- }
-}
-
-bool DrawTargetD2D1::ShouldClipTemporarySurfaceDrawing(CompositionOp aOp,
- const Pattern& aPattern,
- bool aClipIsComplex) {
- bool patternSupported = IsPatternSupportedByD2D(aPattern, aOp);
- return patternSupported && !CurrentLayer().mIsOpaque &&
- D2DSupportsCompositeMode(aOp) && IsOperatorBoundByMask(aOp) &&
- aClipIsComplex;
-}
-
-bool DrawTargetD2D1::PrepareForDrawing(CompositionOp aOp,
- const Pattern& aPattern) {
- if (!EnsureInitialized()) {
- return false;
- }
-
- MarkChanged();
-
- PushAllClips();
-
- bool patternSupported = IsPatternSupportedByD2D(aPattern, aOp);
- if (D2DSupportsPrimitiveBlendMode(aOp) && patternSupported) {
- // It's important to do this before FlushTransformToDC! As this will cause
- // the transform to become dirty.
-
- FlushTransformToDC();
-
- if (aOp != CompositionOp::OP_OVER) {
- mDC->SetPrimitiveBlend(D2DPrimitiveBlendMode(aOp));
- }
-
- return true;
- }
-
- HRESULT result = mDC->CreateCommandList(getter_AddRefs(mCommandList));
- mDC->SetTarget(mCommandList);
- mUsedCommandListsSincePurge++;
-
- // This is where we should have a valid command list. If we don't, something
- // is wrong, and it's likely an OOM.
- if (!mCommandList) {
- gfxDevCrash(LogReason::InvalidCommandList)
- << "Invalid D2D1.1 command list on creation "
- << mUsedCommandListsSincePurge << ", " << gfx::hexa(result);
- }
-
- D2D1_RECT_F rect;
- bool isAligned;
- bool clipIsComplex = CurrentLayer().mPushedClips.size() &&
- !GetDeviceSpaceClipRect(rect, isAligned);
-
- if (ShouldClipTemporarySurfaceDrawing(aOp, aPattern, clipIsComplex)) {
- PushClipsToDC(mDC);
- }
-
- FlushTransformToDC();
-
- return true;
-}
-
-void DrawTargetD2D1::FinalizeDrawing(CompositionOp aOp,
- const Pattern& aPattern) {
- bool patternSupported = IsPatternSupportedByD2D(aPattern, aOp);
-
- if (D2DSupportsPrimitiveBlendMode(aOp) && patternSupported) {
- if (aOp != CompositionOp::OP_OVER)
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_SOURCE_OVER);
- return;
- }
-
- D2D1_RECT_F rect;
- bool isAligned;
- bool clipIsComplex = CurrentLayer().mPushedClips.size() &&
- !GetDeviceSpaceClipRect(rect, isAligned);
-
- if (ShouldClipTemporarySurfaceDrawing(aOp, aPattern, clipIsComplex)) {
- PopClipsFromDC(mDC);
- }
-
- mDC->SetTarget(CurrentTarget());
- if (!mCommandList) {
- gfxDevCrash(LogReason::InvalidCommandList)
- << "Invalid D21.1 command list on finalize";
- return;
- }
- mCommandList->Close();
-
- RefPtr<ID2D1CommandList> source = mCommandList;
- mCommandList = nullptr;
-
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- if (patternSupported) {
- if (D2DSupportsCompositeMode(aOp)) {
- RefPtr<ID2D1Image> tmpImage;
- if (clipIsComplex) {
- PopAllClips();
- if (!IsOperatorBoundByMask(aOp)) {
- tmpImage = GetImageForLayerContent();
- }
- }
- mDC->DrawImage(source, D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2DCompositionMode(aOp));
-
- if (tmpImage) {
- RefPtr<ID2D1ImageBrush> brush;
- RefPtr<ID2D1Geometry> inverseGeom = GetInverseClippedGeometry();
- mDC->CreateImageBrush(tmpImage,
- D2D1::ImageBrushProperties(
- D2D1::RectF(0, 0, mSize.width, mSize.height)),
- getter_AddRefs(brush));
-
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_COPY);
- mDC->FillGeometry(inverseGeom, brush);
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_SOURCE_OVER);
- }
- return;
- }
-
- RefPtr<ID2D1Effect> blendEffect;
- HRESULT hr =
- mDC->CreateEffect(CLSID_D2D1Blend, getter_AddRefs(blendEffect));
-
- if (FAILED(hr) || !blendEffect) {
- gfxWarning() << "Failed to create blend effect!";
- return;
- }
-
- IntRect bounds(IntPoint(), mSize);
- RefPtr<ID2D1Geometry> geom;
- if (CurrentLayer().mPushedClips.size() > 0) {
- geom = GetClippedGeometry(&bounds);
- }
- RefPtr<ID2D1Image> tmpImage = GetImageForLayerContent(&bounds, bool(geom));
- if (!tmpImage) {
- return;
- }
-
- blendEffect->SetInput(0, tmpImage);
- blendEffect->SetInput(1, source);
- blendEffect->SetValue(D2D1_BLEND_PROP_MODE, D2DBlendMode(aOp));
-
- if (geom) {
- RefPtr<ID2D1Image> blendOutput;
- blendEffect->GetOutput(getter_AddRefs(blendOutput));
-
- RefPtr<ID2D1ImageBrush> brush;
- mDC->CreateImageBrush(
- blendOutput, D2D1::ImageBrushProperties(D2DRect(bounds)),
- D2D1::BrushProperties(
- 1.0f, D2D1::Matrix3x2F::Translation(bounds.x, bounds.y)),
- getter_AddRefs(brush));
-
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_COPY);
- mDC->FillGeometry(geom, brush);
- mDC->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND_SOURCE_OVER);
- } else {
- mDC->DrawImage(blendEffect, D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY);
- }
-
- mComplexBlendsWithListInList++;
- return;
- }
-
- if (aPattern.GetType() == PatternType::CONIC_GRADIENT) {
- const ConicGradientPattern* pat =
- static_cast<const ConicGradientPattern*>(&aPattern);
-
- if (!pat->mStops ||
- pat->mStops->GetBackendType() != BackendType::DIRECT2D) {
- // Draw nothing because of no color stops
- return;
- }
- RefPtr<ID2D1Effect> conicGradientEffect;
-
- HRESULT hr = mDC->CreateEffect(CLSID_ConicGradientEffect,
- getter_AddRefs(conicGradientEffect));
- if (FAILED(hr) || !conicGradientEffect) {
- gfxWarning() << "Failed to create conic gradient effect. Code: "
- << hexa(hr);
- return;
- }
-
- PushAllClips();
-
- conicGradientEffect->SetValue(
- CONIC_PROP_STOP_COLLECTION,
- static_cast<const GradientStopsD2D*>(pat->mStops.get())
- ->mStopCollection);
- conicGradientEffect->SetValue(
- CONIC_PROP_CENTER, D2D1::Vector2F(pat->mCenter.x, pat->mCenter.y));
- conicGradientEffect->SetValue(CONIC_PROP_ANGLE, pat->mAngle);
- conicGradientEffect->SetValue(CONIC_PROP_START_OFFSET, pat->mStartOffset);
- conicGradientEffect->SetValue(CONIC_PROP_END_OFFSET, pat->mEndOffset);
- conicGradientEffect->SetValue(CONIC_PROP_TRANSFORM,
- D2DMatrix(pat->mMatrix * mTransform));
- conicGradientEffect->SetInput(0, source);
-
- mDC->DrawImage(conicGradientEffect,
- D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2DCompositionMode(aOp));
- return;
- }
-
- MOZ_ASSERT(aPattern.GetType() == PatternType::RADIAL_GRADIENT);
-
- const RadialGradientPattern* pat =
- static_cast<const RadialGradientPattern*>(&aPattern);
- if (pat->mCenter1 == pat->mCenter2 && pat->mRadius1 == pat->mRadius2) {
- // Draw nothing!
- return;
- }
-
- if (!pat->mStops || pat->mStops->GetBackendType() != BackendType::DIRECT2D) {
- // Draw nothing because of no color stops
- return;
- }
-
- RefPtr<ID2D1Effect> radialGradientEffect;
-
- HRESULT hr = mDC->CreateEffect(CLSID_RadialGradientEffect,
- getter_AddRefs(radialGradientEffect));
- if (FAILED(hr) || !radialGradientEffect) {
- gfxWarning() << "Failed to create radial gradient effect. Code: "
- << hexa(hr);
- return;
- }
-
- PushAllClips();
-
- radialGradientEffect->SetValue(
- RADIAL_PROP_STOP_COLLECTION,
- static_cast<const GradientStopsD2D*>(pat->mStops.get())->mStopCollection);
- radialGradientEffect->SetValue(
- RADIAL_PROP_CENTER_1, D2D1::Vector2F(pat->mCenter1.x, pat->mCenter1.y));
- radialGradientEffect->SetValue(
- RADIAL_PROP_CENTER_2, D2D1::Vector2F(pat->mCenter2.x, pat->mCenter2.y));
- radialGradientEffect->SetValue(RADIAL_PROP_RADIUS_1, pat->mRadius1);
- radialGradientEffect->SetValue(RADIAL_PROP_RADIUS_2, pat->mRadius2);
- radialGradientEffect->SetValue(RADIAL_PROP_RADIUS_2, pat->mRadius2);
- radialGradientEffect->SetValue(RADIAL_PROP_TRANSFORM,
- D2DMatrix(pat->mMatrix * mTransform));
- radialGradientEffect->SetInput(0, source);
-
- mDC->DrawImage(radialGradientEffect, D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2DCompositionMode(aOp));
-}
-
-void DrawTargetD2D1::AddDependencyOnSource(SourceSurfaceD2D1* aSource) {
- Maybe<MutexAutoLock> snapshotLock;
- // We grab the SnapshotLock as well, this guaranteeds aSource->mDrawTarget
- // cannot be cleared in between the if statement and the dereference.
- if (aSource->mSnapshotLock) {
- snapshotLock.emplace(*aSource->mSnapshotLock);
- }
- {
- StaticMutexAutoLock lock(Factory::mDTDependencyLock);
- if (aSource->mDrawTarget &&
- !mDependingOnTargets.count(aSource->mDrawTarget)) {
- aSource->mDrawTarget->mDependentTargets.insert(this);
- mDependingOnTargets.insert(aSource->mDrawTarget);
- }
- }
-}
-
-static D2D1_RECT_F IntersectRect(const D2D1_RECT_F& aRect1,
- const D2D1_RECT_F& aRect2) {
- D2D1_RECT_F result;
- result.left = std::max(aRect1.left, aRect2.left);
- result.top = std::max(aRect1.top, aRect2.top);
- result.right = std::min(aRect1.right, aRect2.right);
- result.bottom = std::min(aRect1.bottom, aRect2.bottom);
-
- result.right = std::max(result.right, result.left);
- result.bottom = std::max(result.bottom, result.top);
-
- return result;
-}
-
-bool DrawTargetD2D1::GetDeviceSpaceClipRect(D2D1_RECT_F& aClipRect,
- bool& aIsPixelAligned) {
- aIsPixelAligned = true;
- aClipRect = D2D1::RectF(0, 0, mSize.width, mSize.height);
-
- if (!CurrentLayer().mPushedClips.size()) {
- return false;
- }
-
- for (auto iter = CurrentLayer().mPushedClips.begin();
- iter != CurrentLayer().mPushedClips.end(); iter++) {
- if (iter->mGeometry) {
- return false;
- }
- aClipRect = IntersectRect(aClipRect, iter->mBounds);
- if (!iter->mIsPixelAligned) {
- aIsPixelAligned = false;
- }
- }
- return true;
-}
-
-static const uint32_t sComplexBlendsWithListAllowedInList = 4;
-
-already_AddRefed<ID2D1Image> DrawTargetD2D1::GetImageForLayerContent(
- const IntRect* aBounds, bool aShouldPreserveContent) {
- PopAllClips();
-
- IntRect bounds = aBounds ? *aBounds : IntRect(IntPoint(), mSize);
- IntSize size(bounds.XMost(), bounds.YMost());
- if (!CurrentLayer().mCurrentList) {
- RefPtr<ID2D1Bitmap> tmpBitmap;
- HRESULT hr = mDC->CreateBitmap(
- D2DIntSize(size), D2D1::BitmapProperties(D2DPixelFormat(mFormat)),
- getter_AddRefs(tmpBitmap));
- if (FAILED(hr)) {
- gfxCriticalError(
- CriticalLog::DefaultOptions(Factory::ReasonableSurfaceSize(size)))
- << "[D2D1.1] 6CreateBitmap failure " << size << " Code: " << hexa(hr)
- << " format " << (int)mFormat;
- // If it's a recreate target error, return and handle it elsewhere.
- if (hr == D2DERR_RECREATE_TARGET) {
- mDC->Flush();
- return nullptr;
- }
- // For now, crash in other scenarios; this should happen because tmpBitmap
- // is null and CopyFromBitmap call below dereferences it.
- }
- mDC->Flush();
-
- D2D1_POINT_2U destOffset = D2D1::Point2U(bounds.x, bounds.y);
- D2D1_RECT_U srcRect =
- D2D1::RectU(bounds.x, bounds.y, bounds.width, bounds.height);
- tmpBitmap->CopyFromBitmap(&destOffset, mBitmap, &srcRect);
- return tmpBitmap.forget();
- } else {
- RefPtr<ID2D1CommandList> list = CurrentLayer().mCurrentList;
- mDC->CreateCommandList(getter_AddRefs(CurrentLayer().mCurrentList));
- mDC->SetTarget(CurrentTarget());
- list->Close();
-
- RefPtr<ID2D1Bitmap1> tmpBitmap;
- if (mComplexBlendsWithListInList >= sComplexBlendsWithListAllowedInList) {
- D2D1_BITMAP_PROPERTIES1 props = D2D1::BitmapProperties1(
- D2D1_BITMAP_OPTIONS_TARGET,
- D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
- D2D1_ALPHA_MODE_PREMULTIPLIED));
- mDC->CreateBitmap(D2DIntSize(size), nullptr, 0, &props,
- getter_AddRefs(tmpBitmap));
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
- mDC->SetTarget(tmpBitmap);
- mDC->DrawImage(list, D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR,
- D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY);
- mDC->SetTarget(CurrentTarget());
- mComplexBlendsWithListInList = 0;
- }
-
- DCCommandSink sink(mDC);
-
- if (aShouldPreserveContent) {
- list->Stream(&sink);
- }
-
- if (tmpBitmap) {
- return tmpBitmap.forget();
- }
-
- return list.forget();
- }
-}
-
-already_AddRefed<ID2D1Geometry> DrawTargetD2D1::GetClippedGeometry(
- IntRect* aClipBounds) {
- if (mCurrentClippedGeometry) {
- *aClipBounds = mCurrentClipBounds;
- RefPtr<ID2D1Geometry> clippedGeometry(mCurrentClippedGeometry);
- return clippedGeometry.forget();
- }
-
- MOZ_ASSERT(CurrentLayer().mPushedClips.size());
-
- mCurrentClipBounds = IntRect(IntPoint(0, 0), mSize);
-
- // if pathGeom is null then pathRect represents the path.
- RefPtr<ID2D1Geometry> pathGeom;
- D2D1_RECT_F pathRect;
- bool pathRectIsAxisAligned = false;
- auto iter = CurrentLayer().mPushedClips.begin();
-
- if (iter->mGeometry) {
- pathGeom = GetTransformedGeometry(iter->mGeometry, iter->mTransform);
- } else {
- pathRect = iter->mBounds;
- pathRectIsAxisAligned = iter->mIsPixelAligned;
- }
-
- iter++;
- for (; iter != CurrentLayer().mPushedClips.end(); iter++) {
- // Do nothing but add it to the current clip bounds.
- if (!iter->mGeometry && iter->mIsPixelAligned) {
- mCurrentClipBounds.IntersectRect(
- mCurrentClipBounds,
- IntRect(int32_t(iter->mBounds.left), int32_t(iter->mBounds.top),
- int32_t(iter->mBounds.right - iter->mBounds.left),
- int32_t(iter->mBounds.bottom - iter->mBounds.top)));
- continue;
- }
-
- if (!pathGeom) {
- if (pathRectIsAxisAligned) {
- mCurrentClipBounds.IntersectRect(
- mCurrentClipBounds,
- IntRect(int32_t(pathRect.left), int32_t(pathRect.top),
- int32_t(pathRect.right - pathRect.left),
- int32_t(pathRect.bottom - pathRect.top)));
- }
- if (iter->mGeometry) {
- // See if pathRect needs to go into the path geometry.
- if (!pathRectIsAxisAligned) {
- pathGeom = ConvertRectToGeometry(pathRect);
- } else {
- pathGeom = GetTransformedGeometry(iter->mGeometry, iter->mTransform);
- }
- } else {
- pathRect = IntersectRect(pathRect, iter->mBounds);
- pathRectIsAxisAligned = false;
- continue;
- }
- }
-
- RefPtr<ID2D1PathGeometry> newGeom;
- factory()->CreatePathGeometry(getter_AddRefs(newGeom));
-
- RefPtr<ID2D1GeometrySink> currentSink;
- newGeom->Open(getter_AddRefs(currentSink));
-
- if (iter->mGeometry) {
- pathGeom->CombineWithGeometry(iter->mGeometry,
- D2D1_COMBINE_MODE_INTERSECT,
- iter->mTransform, currentSink);
- } else {
- RefPtr<ID2D1Geometry> rectGeom = ConvertRectToGeometry(iter->mBounds);
- pathGeom->CombineWithGeometry(rectGeom, D2D1_COMBINE_MODE_INTERSECT,
- D2D1::IdentityMatrix(), currentSink);
- }
-
- currentSink->Close();
-
- pathGeom = newGeom.forget();
- }
-
- // For now we need mCurrentClippedGeometry to always be non-nullptr. This
- // method might seem a little strange but it is just fine, if pathGeom is
- // nullptr pathRect will always still contain 1 clip unaccounted for
- // regardless of mCurrentClipBounds.
- if (!pathGeom) {
- pathGeom = ConvertRectToGeometry(pathRect);
- }
- mCurrentClippedGeometry = pathGeom.forget();
- *aClipBounds = mCurrentClipBounds;
- RefPtr<ID2D1Geometry> clippedGeometry(mCurrentClippedGeometry);
- return clippedGeometry.forget();
-}
-
-already_AddRefed<ID2D1Geometry> DrawTargetD2D1::GetInverseClippedGeometry() {
- IntRect bounds;
- RefPtr<ID2D1Geometry> geom = GetClippedGeometry(&bounds);
- RefPtr<ID2D1RectangleGeometry> rectGeom;
- RefPtr<ID2D1PathGeometry> inverseGeom;
-
- factory()->CreateRectangleGeometry(
- D2D1::RectF(0, 0, mSize.width, mSize.height), getter_AddRefs(rectGeom));
- factory()->CreatePathGeometry(getter_AddRefs(inverseGeom));
- RefPtr<ID2D1GeometrySink> sink;
- inverseGeom->Open(getter_AddRefs(sink));
- rectGeom->CombineWithGeometry(geom, D2D1_COMBINE_MODE_EXCLUDE,
- D2D1::IdentityMatrix(), sink);
- sink->Close();
-
- return inverseGeom.forget();
-}
-
-void DrawTargetD2D1::PopAllClips() {
- if (CurrentLayer().mClipsArePushed) {
- PopClipsFromDC(mDC);
-
- CurrentLayer().mClipsArePushed = false;
- }
-}
-
-void DrawTargetD2D1::PushAllClips() {
- if (!CurrentLayer().mClipsArePushed) {
- PushClipsToDC(mDC);
-
- CurrentLayer().mClipsArePushed = true;
- }
-}
-
-void DrawTargetD2D1::PushClipsToDC(ID2D1DeviceContext* aDC,
- bool aForceIgnoreAlpha,
- const D2D1_RECT_F& aMaxRect) {
- mDC->SetTransform(D2D1::IdentityMatrix());
- mTransformDirty = true;
-
- for (auto iter = CurrentLayer().mPushedClips.begin();
- iter != CurrentLayer().mPushedClips.end(); iter++) {
- if (iter->mGeometry) {
- PushD2DLayer(aDC, iter->mGeometry, iter->mTransform,
- iter->mIsPixelAligned, aForceIgnoreAlpha, aMaxRect);
- } else {
- mDC->PushAxisAlignedClip(iter->mBounds,
- iter->mIsPixelAligned
- ? D2D1_ANTIALIAS_MODE_ALIASED
- : D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
- }
- }
-}
-
-void DrawTargetD2D1::PopClipsFromDC(ID2D1DeviceContext* aDC) {
- for (int i = CurrentLayer().mPushedClips.size() - 1; i >= 0; i--) {
- if (CurrentLayer().mPushedClips[i].mGeometry) {
- aDC->PopLayer();
- } else {
- aDC->PopAxisAlignedClip();
- }
- }
-}
-
-already_AddRefed<ID2D1Brush> DrawTargetD2D1::CreateTransparentBlackBrush() {
- return GetSolidColorBrush(D2D1::ColorF(0, 0));
-}
-
-already_AddRefed<ID2D1SolidColorBrush> DrawTargetD2D1::GetSolidColorBrush(
- const D2D_COLOR_F& aColor) {
- RefPtr<ID2D1SolidColorBrush> brush = mSolidColorBrush;
- brush->SetColor(aColor);
- return brush.forget();
-}
-
-already_AddRefed<ID2D1Brush> DrawTargetD2D1::CreateBrushForPattern(
- const Pattern& aPattern, const DrawOptions& aOptions) {
- if (!IsPatternSupportedByD2D(aPattern) ||
- aOptions.mCompositionOp == CompositionOp::OP_CLEAR) {
- return GetSolidColorBrush(D2D1::ColorF(1.0f, 1.0f, 1.0f, 1.0f));
- }
-
- if (aPattern.GetType() == PatternType::COLOR) {
- DeviceColor color = static_cast<const ColorPattern*>(&aPattern)->mColor;
- return GetSolidColorBrush(
- D2D1::ColorF(color.r, color.g, color.b, color.a * aOptions.mAlpha));
- }
- if (aPattern.GetType() == PatternType::LINEAR_GRADIENT) {
- RefPtr<ID2D1LinearGradientBrush> gradBrush;
- const LinearGradientPattern* pat =
- static_cast<const LinearGradientPattern*>(&aPattern);
-
- if (!pat->mStops ||
- pat->mStops->GetBackendType() != BackendType::DIRECT2D) {
- gfxDebug() << "No stops specified for gradient pattern.";
- return CreateTransparentBlackBrush();
- }
-
- if (pat->mBegin == pat->mEnd) {
- return CreateTransparentBlackBrush();
- }
-
- GradientStopsD2D* stops = static_cast<GradientStopsD2D*>(pat->mStops.get());
-
- mDC->CreateLinearGradientBrush(
- D2D1::LinearGradientBrushProperties(D2DPoint(pat->mBegin),
- D2DPoint(pat->mEnd)),
- D2D1::BrushProperties(aOptions.mAlpha, D2DMatrix(pat->mMatrix)),
- stops->mStopCollection, getter_AddRefs(gradBrush));
-
- if (!gradBrush) {
- gfxWarning() << "Couldn't create gradient brush.";
- return CreateTransparentBlackBrush();
- }
-
- return gradBrush.forget();
- }
- if (aPattern.GetType() == PatternType::RADIAL_GRADIENT) {
- RefPtr<ID2D1RadialGradientBrush> gradBrush;
- const RadialGradientPattern* pat =
- static_cast<const RadialGradientPattern*>(&aPattern);
-
- if (!pat->mStops ||
- pat->mStops->GetBackendType() != BackendType::DIRECT2D) {
- gfxDebug() << "No stops specified for gradient pattern.";
- return CreateTransparentBlackBrush();
- }
-
- if (pat->mCenter1 == pat->mCenter2 && pat->mRadius1 == pat->mRadius2) {
- return CreateTransparentBlackBrush();
- }
-
- GradientStopsD2D* stops = static_cast<GradientStopsD2D*>(pat->mStops.get());
-
- // This will not be a complex radial gradient brush.
- mDC->CreateRadialGradientBrush(
- D2D1::RadialGradientBrushProperties(
- D2DPoint(pat->mCenter2), D2DPoint(pat->mCenter1 - pat->mCenter2),
- pat->mRadius2, pat->mRadius2),
- D2D1::BrushProperties(aOptions.mAlpha, D2DMatrix(pat->mMatrix)),
- stops->mStopCollection, getter_AddRefs(gradBrush));
-
- if (!gradBrush) {
- gfxWarning() << "Couldn't create gradient brush.";
- return CreateTransparentBlackBrush();
- }
-
- return gradBrush.forget();
- }
- if (aPattern.GetType() == PatternType::SURFACE) {
- const SurfacePattern* pat = static_cast<const SurfacePattern*>(&aPattern);
-
- if (!pat->mSurface) {
- gfxDebug() << "No source surface specified for surface pattern";
- return CreateTransparentBlackBrush();
- }
-
- D2D1_RECT_F samplingBounds;
- Matrix mat = pat->mMatrix;
-
- MOZ_ASSERT(pat->mSurface->IsValid());
-
- RefPtr<SourceSurface> surf = pat->mSurface;
-
- RefPtr<ID2D1Image> image = GetImageForSurface(
- surf, mat, pat->mExtendMode,
- !pat->mSamplingRect.IsEmpty() ? &pat->mSamplingRect : nullptr);
-
- if (!image) {
- return CreateTransparentBlackBrush();
- }
-
- if (surf->GetFormat() == SurfaceFormat::A8) {
- // See bug 1251431, at least FillOpacityMask does not appear to allow a
- // source bitmapbrush with source format A8. This creates a BGRA surface
- // with the same alpha values that the A8 surface has.
- RefPtr<ID2D1Bitmap> bitmap;
- HRESULT hr = image->QueryInterface((ID2D1Bitmap**)getter_AddRefs(bitmap));
- if (SUCCEEDED(hr) && bitmap) {
- RefPtr<ID2D1Image> oldTarget;
- RefPtr<ID2D1Bitmap1> tmpBitmap;
- mDC->CreateBitmap(D2D1::SizeU(pat->mSurface->GetSize().width,
- pat->mSurface->GetSize().height),
- nullptr, 0,
- D2D1::BitmapProperties1(
- D2D1_BITMAP_OPTIONS_TARGET,
- D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
- D2D1_ALPHA_MODE_PREMULTIPLIED)),
- getter_AddRefs(tmpBitmap));
-
- if (!tmpBitmap) {
- return CreateTransparentBlackBrush();
- }
-
- mDC->GetTarget(getter_AddRefs(oldTarget));
- mDC->SetTarget(tmpBitmap);
-
- RefPtr<ID2D1SolidColorBrush> brush;
- mDC->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::White),
- getter_AddRefs(brush));
- mDC->FillOpacityMask(bitmap, brush);
- mDC->SetTarget(oldTarget);
- image = tmpBitmap;
- }
- }
-
- if (pat->mSamplingRect.IsEmpty()) {
- RefPtr<ID2D1Bitmap> bitmap;
- HRESULT hr = image->QueryInterface((ID2D1Bitmap**)getter_AddRefs(bitmap));
- if (SUCCEEDED(hr) && bitmap) {
- /**
- * Create the brush with the proper repeat modes.
- */
- RefPtr<ID2D1BitmapBrush> bitmapBrush;
- D2D1_EXTEND_MODE xRepeat = D2DExtend(pat->mExtendMode, Axis::X_AXIS);
- D2D1_EXTEND_MODE yRepeat = D2DExtend(pat->mExtendMode, Axis::Y_AXIS);
-
- mDC->CreateBitmapBrush(
- bitmap,
- D2D1::BitmapBrushProperties(xRepeat, yRepeat,
- D2DFilter(pat->mSamplingFilter)),
- D2D1::BrushProperties(aOptions.mAlpha, D2DMatrix(mat)),
- getter_AddRefs(bitmapBrush));
- if (!bitmapBrush) {
- gfxWarning() << "Couldn't create bitmap brush!";
- return CreateTransparentBlackBrush();
- }
- return bitmapBrush.forget();
- }
- }
-
- RefPtr<ID2D1ImageBrush> imageBrush;
- if (pat->mSamplingRect.IsEmpty()) {
- samplingBounds = D2D1::RectF(0, 0, Float(pat->mSurface->GetSize().width),
- Float(pat->mSurface->GetSize().height));
- } else if (surf->GetType() == SurfaceType::D2D1_1_IMAGE) {
- samplingBounds = D2DRect(pat->mSamplingRect);
- mat.PreTranslate(pat->mSamplingRect.X(), pat->mSamplingRect.Y());
- } else {
- // We will do a partial upload of the sampling restricted area from
- // GetImageForSurface.
- samplingBounds = D2D1::RectF(0, 0, pat->mSamplingRect.Width(),
- pat->mSamplingRect.Height());
- }
-
- D2D1_EXTEND_MODE xRepeat = D2DExtend(pat->mExtendMode, Axis::X_AXIS);
- D2D1_EXTEND_MODE yRepeat = D2DExtend(pat->mExtendMode, Axis::Y_AXIS);
-
- mDC->CreateImageBrush(
- image,
- D2D1::ImageBrushProperties(samplingBounds, xRepeat, yRepeat,
- D2DInterpolationMode(pat->mSamplingFilter)),
- D2D1::BrushProperties(aOptions.mAlpha, D2DMatrix(mat)),
- getter_AddRefs(imageBrush));
-
- if (!imageBrush) {
- gfxWarning() << "Couldn't create image brush!";
- return CreateTransparentBlackBrush();
- }
-
- return imageBrush.forget();
- }
-
- gfxWarning() << "Invalid pattern type detected.";
- return CreateTransparentBlackBrush();
-}
-
-already_AddRefed<ID2D1Image> DrawTargetD2D1::GetImageForSurface(
- SourceSurface* aSurface, Matrix& aSourceTransform, ExtendMode aExtendMode,
- const IntRect* aSourceRect, bool aUserSpace) {
- RefPtr<ID2D1Image> image;
- RefPtr<SourceSurface> surface = aSurface->GetUnderlyingSurface();
-
- if (!surface) {
- return nullptr;
- }
-
- switch (surface->GetType()) {
- case SurfaceType::D2D1_1_IMAGE: {
- SourceSurfaceD2D1* surf = static_cast<SourceSurfaceD2D1*>(surface.get());
- image = surf->GetImage();
- AddDependencyOnSource(surf);
- } break;
- default: {
- RefPtr<DataSourceSurface> dataSurf = surface->GetDataSurface();
- if (!dataSurf) {
- gfxWarning() << "Invalid surface type.";
- return nullptr;
- }
- Matrix transform = aUserSpace ? mTransform : Matrix();
- return CreatePartialBitmapForSurface(dataSurf, transform, mSize,
- aExtendMode, aSourceTransform, mDC,
- aSourceRect);
- } break;
- }
-
- return image.forget();
-}
-
-already_AddRefed<SourceSurface> DrawTargetD2D1::OptimizeSourceSurface(
- SourceSurface* aSurface) const {
- if (aSurface->GetType() == SurfaceType::D2D1_1_IMAGE) {
- RefPtr<SourceSurface> surface(aSurface);
- return surface.forget();
- }
-
- RefPtr<ID2D1DeviceContext> dc = Factory::GetD2DDeviceContext();
- if (!dc) {
- return nullptr;
- }
-
- RefPtr<DataSourceSurface> data = aSurface->GetDataSurface();
-
- std::optional<SurfaceFormat> convertTo;
- switch (data->GetFormat()) {
- case gfx::SurfaceFormat::R8G8B8X8:
- convertTo = SurfaceFormat::B8G8R8X8;
- break;
- case gfx::SurfaceFormat::R8G8B8A8:
- convertTo = SurfaceFormat::B8G8R8X8;
- break;
- default:
- break;
- }
-
- if (convertTo) {
- const auto size = data->GetSize();
- const RefPtr<DrawTarget> dt =
- Factory::CreateDrawTarget(BackendType::SKIA, size, *convertTo);
- if (!dt) {
- return nullptr;
- }
- dt->CopySurface(data, {{}, size}, {});
-
- const RefPtr<SourceSurface> snapshot = dt->Snapshot();
- data = snapshot->GetDataSurface();
- }
-
- RefPtr<ID2D1Bitmap1> bitmap;
- {
- DataSourceSurface::ScopedMap map(data, DataSourceSurface::READ);
- if (MOZ2D_WARN_IF(!map.IsMapped())) {
- return nullptr;
- }
-
- HRESULT hr = dc->CreateBitmap(
- D2DIntSize(data->GetSize()), map.GetData(), map.GetStride(),
- D2D1::BitmapProperties1(D2D1_BITMAP_OPTIONS_NONE,
- D2DPixelFormat(data->GetFormat())),
- getter_AddRefs(bitmap));
-
- if (FAILED(hr)) {
- gfxCriticalError(CriticalLog::DefaultOptions(
- Factory::ReasonableSurfaceSize(data->GetSize())))
- << "[D2D1.1] 4CreateBitmap failure " << data->GetSize()
- << " Code: " << hexa(hr) << " format " << (int)data->GetFormat();
- }
- }
-
- if (!bitmap) {
- return data.forget();
- }
-
- return MakeAndAddRef<SourceSurfaceD2D1>(bitmap.get(), dc.get(),
- data->GetFormat(), data->GetSize());
-}
-
-void DrawTargetD2D1::PushD2DLayer(ID2D1DeviceContext* aDC,
- ID2D1Geometry* aGeometry,
- const D2D1_MATRIX_3X2_F& aTransform,
- bool aPixelAligned, bool aForceIgnoreAlpha,
- const D2D1_RECT_F& aMaxRect) {
- D2D1_LAYER_OPTIONS1 options = D2D1_LAYER_OPTIONS1_NONE;
-
- if (CurrentLayer().mIsOpaque || aForceIgnoreAlpha) {
- options = D2D1_LAYER_OPTIONS1_IGNORE_ALPHA |
- D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND;
- }
-
- D2D1_ANTIALIAS_MODE antialias = aPixelAligned
- ? D2D1_ANTIALIAS_MODE_ALIASED
- : D2D1_ANTIALIAS_MODE_PER_PRIMITIVE;
-
- mDC->PushLayer(D2D1::LayerParameters1(aMaxRect, aGeometry, antialias,
- aTransform, 1.0, nullptr, options),
- nullptr);
-}
-
-bool DrawTargetD2D1::IsDeviceContextValid() const {
- uint32_t seqNo;
- return mDC && Factory::GetD2D1Device(&seqNo) && seqNo == mDeviceSeq;
-}
-
-} // namespace gfx
-} // namespace mozilla
diff --git a/gfx/2d/DrawTargetD2D1.h b/gfx/2d/DrawTargetD2D1.h
@@ -1,339 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_DRAWTARGETD2D1_H_
-#define MOZILLA_GFX_DRAWTARGETD2D1_H_
-
-#include "2D.h"
-#include <d3d11.h>
-#include <d2d1_1.h>
-#include "PathD2D.h"
-#include "HelpersD2D.h"
-#include "mozilla/StaticPtr.h"
-
-#include <vector>
-#include <sstream>
-
-#include <unordered_set>
-
-struct IDWriteFactory;
-
-namespace mozilla {
-namespace gfx {
-
-class SourceSurfaceD2D1;
-
-const int32_t kLayerCacheSize1 = 5;
-
-class DrawTargetD2D1 : public DrawTarget {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(DrawTargetD2D1, override)
- DrawTargetD2D1();
- virtual ~DrawTargetD2D1();
-
- virtual bool IsValid() const override;
- virtual DrawTargetType GetType() const override {
- return DrawTargetType::HARDWARE_RASTER;
- }
- virtual BackendType GetBackendType() const override {
- return BackendType::DIRECT2D1_1;
- }
- virtual already_AddRefed<SourceSurface> Snapshot() override;
- virtual already_AddRefed<SourceSurface> IntoLuminanceSource(
- LuminanceType aLuminanceType, float aOpacity) override;
- virtual IntSize GetSize() const override { return mSize; }
-
- virtual void Flush() override;
- virtual void DrawSurface(SourceSurface* aSurface, const Rect& aDest,
- const Rect& aSource,
- const DrawSurfaceOptions& aSurfOptions,
- const DrawOptions& aOptions) override;
- virtual void DrawFilter(FilterNode* aNode, const Rect& aSourceRect,
- const Point& aDestPoint,
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void DrawSurfaceWithShadow(SourceSurface* aSurface,
- const Point& aDest,
- const ShadowOptions& aShadow,
- CompositionOp aOperator) override;
- virtual void ClearRect(const Rect& aRect) override;
- virtual void MaskSurface(
- const Pattern& aSource, SourceSurface* aMask, Point aOffset,
- const DrawOptions& aOptions = DrawOptions()) override;
-
- virtual void CopySurface(SourceSurface* aSurface, const IntRect& aSourceRect,
- const IntPoint& aDestination) override;
-
- virtual void FillRect(const Rect& aRect, const Pattern& aPattern,
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void FillRoundedRect(
- const RoundedRect& aRect, const Pattern& aPattern,
- const DrawOptions& aOptions = DrawOptions()) override;
-
- virtual void StrokeRect(const Rect& aRect, const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions = StrokeOptions(),
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void StrokeLine(const Point& aStart, const Point& aEnd,
- const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions = StrokeOptions(),
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void StrokeCircle(
- const Point& aOrigin, float radius, const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions = StrokeOptions(),
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void Stroke(const Path* aPath, const Pattern& aPattern,
- const StrokeOptions& aStrokeOptions = StrokeOptions(),
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void Fill(const Path* aPath, const Pattern& aPattern,
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void FillCircle(const Point& aOrigin, float radius,
- const Pattern& aPattern,
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void FillGlyphs(ScaledFont* aFont, const GlyphBuffer& aBuffer,
- const Pattern& aPattern,
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void Mask(const Pattern& aSource, const Pattern& aMask,
- const DrawOptions& aOptions = DrawOptions()) override;
- virtual void PushClip(const Path* aPath) override;
- virtual void PushClipRect(const Rect& aRect) override;
- virtual void PushDeviceSpaceClipRects(const IntRect* aRects,
- uint32_t aCount) override;
-
- virtual void PopClip() override;
- virtual bool RemoveAllClips() override;
-
- virtual void PushLayer(bool aOpaque, Float aOpacity, SourceSurface* aMask,
- const Matrix& aMaskTransform,
- const IntRect& aBounds = IntRect(),
- bool aCopyBackground = false) override;
- virtual void PopLayer() override;
-
- virtual already_AddRefed<SourceSurface> CreateSourceSurfaceFromData(
- unsigned char* aData, const IntSize& aSize, int32_t aStride,
- SurfaceFormat aFormat) const override;
- virtual already_AddRefed<SourceSurface> OptimizeSourceSurface(
- SourceSurface* aSurface) const override;
-
- virtual already_AddRefed<SourceSurface> CreateSourceSurfaceFromNativeSurface(
- const NativeSurface& aSurface) const override {
- return nullptr;
- }
-
- virtual already_AddRefed<DrawTarget> CreateSimilarDrawTarget(
- const IntSize& aSize, SurfaceFormat aFormat) const override;
- virtual bool CanCreateSimilarDrawTarget(const IntSize& aSize,
- SurfaceFormat aFormat) const override;
- virtual RefPtr<DrawTarget> CreateClippedDrawTarget(
- const Rect& aBounds, SurfaceFormat aFormat) override;
-
- virtual already_AddRefed<PathBuilder> CreatePathBuilder(
- FillRule aFillRule = FillRule::FILL_WINDING) const override {
- return PathBuilderD2D::Create(aFillRule);
- }
-
- virtual already_AddRefed<GradientStops> CreateGradientStops(
- GradientStop* aStops, uint32_t aNumStops,
- ExtendMode aExtendMode = ExtendMode::CLAMP) const override;
-
- virtual already_AddRefed<FilterNode> CreateFilter(FilterType aType) override;
-
- virtual bool SupportsRegionClipping() const override { return false; }
- virtual bool IsCurrentGroupOpaque() override {
- return CurrentLayer().mIsOpaque;
- }
-
- virtual void* GetNativeSurface(NativeSurfaceType aType) override {
- return nullptr;
- }
-
- virtual void DetachAllSnapshots() override { MarkChanged(); }
-
- bool Init(const IntSize& aSize, SurfaceFormat aFormat);
- bool Init(ID3D11Texture2D* aTexture, SurfaceFormat aFormat);
- uint32_t GetByteSize() const;
-
- // This function will get an image for a surface, it may adjust the source
- // transform for any transformation of the resulting image relative to the
- // oritingal SourceSurface. By default, the surface and its transform are
- // interpreted in user-space, but may be specified in device-space instead.
- already_AddRefed<ID2D1Image> GetImageForSurface(
- SourceSurface* aSurface, Matrix& aSourceTransform, ExtendMode aExtendMode,
- const IntRect* aSourceRect = nullptr, bool aUserSpace = true);
-
- already_AddRefed<ID2D1Image> GetImageForSurface(SourceSurface* aSurface,
- ExtendMode aExtendMode) {
- Matrix mat;
- return GetImageForSurface(aSurface, mat, aExtendMode, nullptr);
- }
-
- static RefPtr<ID2D1Factory1> factory();
- static void CleanupD2D();
-
- operator std::string() const {
- std::stringstream stream;
- stream << "DrawTargetD2D 1.1 (" << this << ")";
- return stream.str();
- }
-
- static uint32_t GetMaxSurfaceSize() {
- return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION;
- }
-
- static uint64_t mVRAMUsageDT;
- static uint64_t mVRAMUsageSS;
-
- private:
- friend class SourceSurfaceD2D1;
-
- void FlushInternal(bool aHasDependencyMutex = false);
- bool EnsureInitialized();
-
- typedef std::unordered_set<DrawTargetD2D1*> TargetSet;
-
- // This function will mark the surface as changing, and make sure any
- // copy-on-write snapshots are notified.
- void MarkChanged();
- bool ShouldClipTemporarySurfaceDrawing(CompositionOp aOp,
- const Pattern& aPattern,
- bool aClipIsComplex);
- bool PrepareForDrawing(CompositionOp aOp, const Pattern& aPattern);
- void FinalizeDrawing(CompositionOp aOp, const Pattern& aPattern);
- bool MaybeClearRect(CompositionOp aOp, const Rect& aBounds);
- void FlushTransformToDC() {
- if (mTransformDirty) {
- mDC->SetTransform(D2DMatrix(mTransform));
- mTransformDirty = false;
- }
- }
- void AddDependencyOnSource(SourceSurfaceD2D1* aSource);
-
- // Must be called with all clips popped and an identity matrix set.
- already_AddRefed<ID2D1Image> GetImageForLayerContent(
- const IntRect* aBounds = nullptr, bool aShouldPreserveContent = true);
-
- ID2D1Image* CurrentTarget() {
- if (CurrentLayer().mCurrentList) {
- return CurrentLayer().mCurrentList;
- }
- return mBitmap;
- }
-
- // This returns the clipped geometry, in addition it returns aClipBounds which
- // represents the intersection of all pixel-aligned rectangular clips that
- // are currently set. The returned clipped geometry must be clipped by these
- // bounds to correctly reflect the total clip. This is in device space and
- // only for clips applied to the -current layer-.
- already_AddRefed<ID2D1Geometry> GetClippedGeometry(IntRect* aClipBounds);
-
- already_AddRefed<ID2D1Geometry> GetInverseClippedGeometry();
-
- // This gives the device space clip rect applied to the -current layer-.
- bool GetDeviceSpaceClipRect(D2D1_RECT_F& aClipRect, bool& aIsPixelAligned);
-
- void PopAllClips();
- void PushAllClips();
- void PushClipsToDC(ID2D1DeviceContext* aDC, bool aForceIgnoreAlpha = false,
- const D2D1_RECT_F& aMaxRect = D2D1::InfiniteRect());
- void PopClipsFromDC(ID2D1DeviceContext* aDC);
-
- already_AddRefed<ID2D1Brush> CreateTransparentBlackBrush();
- already_AddRefed<ID2D1SolidColorBrush> GetSolidColorBrush(
- const D2D_COLOR_F& aColor);
- already_AddRefed<ID2D1Brush> CreateBrushForPattern(
- const Pattern& aPattern, const DrawOptions& aOptions);
-
- void PushClipGeometry(ID2D1Geometry* aGeometry,
- const D2D1_MATRIX_3X2_F& aTransform,
- bool aPixelAligned = false);
-
- void PushD2DLayer(ID2D1DeviceContext* aDC, ID2D1Geometry* aGeometry,
- const D2D1_MATRIX_3X2_F& aTransform,
- bool aPixelAligned = false, bool aForceIgnoreAlpha = false,
- const D2D1_RECT_F& aLayerRect = D2D1::InfiniteRect());
-
- // This function is used to determine if the mDC is still valid; if it is
- // stale, we should avoid using it to execute any draw commands.
- bool IsDeviceContextValid() const;
-
- IntSize mSize;
-
- RefPtr<ID2D1Geometry> mCurrentClippedGeometry;
- // This is only valid if mCurrentClippedGeometry is non-null. And will
- // only be the intersection of all pixel-aligned retangular clips. This is in
- // device space.
- IntRect mCurrentClipBounds;
- mutable RefPtr<ID2D1DeviceContext> mDC;
- RefPtr<ID2D1Bitmap1> mBitmap;
- RefPtr<ID2D1CommandList> mCommandList;
-
- RefPtr<ID2D1SolidColorBrush> mSolidColorBrush;
-
- // We store this to prevent excessive SetTextRenderingParams calls.
- RefPtr<IDWriteRenderingParams> mTextRenderingParams;
-
- // List of pushed clips.
- struct PushedClip {
- D2D1_RECT_F mBounds;
- // If mGeometry is non-null, the mTransform member will be used.
- D2D1_MATRIX_3X2_F mTransform;
- RefPtr<ID2D1Geometry> mGeometry;
- // Indicates if mBounds, and when non-null, mGeometry with mTransform
- // applied, are pixel-aligned.
- bool mIsPixelAligned;
- };
-
- // List of pushed layers.
- struct PushedLayer {
- PushedLayer()
- : mClipsArePushed(false),
- mIsOpaque(false),
- mOldPermitSubpixelAA(false) {}
-
- std::vector<PushedClip> mPushedClips;
- RefPtr<ID2D1CommandList> mCurrentList;
- // True if the current clip stack is pushed to the CurrentTarget().
- bool mClipsArePushed;
- bool mIsOpaque;
- bool mOldPermitSubpixelAA;
- };
- std::vector<PushedLayer> mPushedLayers;
- PushedLayer& CurrentLayer() { return mPushedLayers.back(); }
-
- // The latest snapshot of this surface. This needs to be told when this
- // target is modified. We keep it alive as a cache.
- RefPtr<SourceSurfaceD2D1> mSnapshot;
- std::shared_ptr<Mutex> mSnapshotLock;
- // A list of targets we need to flush when we're modified.
- TargetSet mDependentTargets;
- // A list of targets which have this object in their mDependentTargets set
- TargetSet mDependingOnTargets;
-
- uint32_t mUsedCommandListsSincePurge;
- uint32_t mTransformedGlyphsSinceLastPurge;
- // When a BlendEffect has been drawn to a command list, and that command list
- // is subsequently used -again- as an input to a blend effect for a command
- // list, this causes an infinite recursion inside D2D as it tries to resolve
- // the bounds. If we resolve the current command list before this happens we
- // can avoid the subsequent hang. (See bug 1293586)
- uint32_t mComplexBlendsWithListInList;
-
- static StaticRefPtr<ID2D1Factory1> mFactory;
- // This value is uesed to verify if the DrawTarget is created by a stale
- // device.
- uint32_t mDeviceSeq;
-
- // List of effects we use
- bool EnsureLuminanceEffect();
- RefPtr<ID2D1Effect> mLuminanceEffect;
-
- enum class InitState { Uninitialized, Success, Failure };
- InitState mInitState;
- RefPtr<IDXGISurface> mSurface;
-};
-
-} // namespace gfx
-} // namespace mozilla
-
-#endif /* MOZILLA_GFX_DRAWTARGETD2D_H_ */
diff --git a/gfx/2d/ExtendInputEffectD2D1.cpp b/gfx/2d/ExtendInputEffectD2D1.cpp
@@ -1,190 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ExtendInputEffectD2D1.h"
-
-#include "Logging.h"
-
-#include "ShadersD2D1.h"
-#include "HelpersD2D.h"
-
-#include <vector>
-
-#define TEXTW(x) L##x
-#define XML(X) \
- TEXTW(#X) // This macro creates a single string from multiple lines of text.
-
-static const PCWSTR kXmlDescription =
- XML(
- <?xml version='1.0'?>
- <Effect>
- <!-- System Properties -->
- <Property name='DisplayName' type='string' value='ExtendInputEffect'/>
- <Property name='Author' type='string' value='Mozilla'/>
- <Property name='Category' type='string' value='Utility Effects'/>
- <Property name='Description' type='string' value='This effect is used to extend the output rect of any input effect to a specified rect.'/>
- <Inputs>
- <Input name='InputEffect'/>
- </Inputs>
- <Property name='OutputRect' type='vector4'>
- <Property name='DisplayName' type='string' value='Output Rect'/>
- </Property>
- </Effect>
- );
-
-namespace mozilla {
-namespace gfx {
-
-ExtendInputEffectD2D1::ExtendInputEffectD2D1()
- : mRefCount(0),
- mOutputRect(D2D1::Vector4F(-FLT_MAX, -FLT_MAX, FLT_MAX, FLT_MAX)) {}
-
-IFACEMETHODIMP
-ExtendInputEffectD2D1::Initialize(ID2D1EffectContext* pContextInternal,
- ID2D1TransformGraph* pTransformGraph) {
- HRESULT hr;
- hr = pTransformGraph->SetSingleTransformNode(this);
-
- if (FAILED(hr)) {
- return hr;
- }
-
- return S_OK;
-}
-
-IFACEMETHODIMP
-ExtendInputEffectD2D1::PrepareForRender(D2D1_CHANGE_TYPE changeType) {
- return S_OK;
-}
-
-IFACEMETHODIMP
-ExtendInputEffectD2D1::SetGraph(ID2D1TransformGraph* pGraph) {
- return E_NOTIMPL;
-}
-
-IFACEMETHODIMP_(ULONG)
-ExtendInputEffectD2D1::AddRef() { return ++mRefCount; }
-
-IFACEMETHODIMP_(ULONG)
-ExtendInputEffectD2D1::Release() {
- if (!--mRefCount) {
- delete this;
- return 0;
- }
- return mRefCount;
-}
-
-IFACEMETHODIMP
-ExtendInputEffectD2D1::QueryInterface(const IID& aIID, void** aPtr) {
- if (!aPtr) {
- return E_POINTER;
- }
-
- if (aIID == IID_IUnknown) {
- *aPtr = static_cast<IUnknown*>(static_cast<ID2D1EffectImpl*>(this));
- } else if (aIID == IID_ID2D1EffectImpl) {
- *aPtr = static_cast<ID2D1EffectImpl*>(this);
- } else if (aIID == IID_ID2D1DrawTransform) {
- *aPtr = static_cast<ID2D1DrawTransform*>(this);
- } else if (aIID == IID_ID2D1Transform) {
- *aPtr = static_cast<ID2D1Transform*>(this);
- } else if (aIID == IID_ID2D1TransformNode) {
- *aPtr = static_cast<ID2D1TransformNode*>(this);
- } else {
- return E_NOINTERFACE;
- }
-
- static_cast<IUnknown*>(*aPtr)->AddRef();
- return S_OK;
-}
-
-static D2D1_RECT_L ConvertFloatToLongRect(const D2D1_VECTOR_4F& aRect) {
- // Clamp values to LONG range. We can't use std::min/max here because we want
- // the comparison to operate on a type that's different from the type of the
- // result.
- return D2D1::RectL(aRect.x <= float(LONG_MIN) ? LONG_MIN : LONG(aRect.x),
- aRect.y <= float(LONG_MIN) ? LONG_MIN : LONG(aRect.y),
- aRect.z >= float(LONG_MAX) ? LONG_MAX : LONG(aRect.z),
- aRect.w >= float(LONG_MAX) ? LONG_MAX : LONG(aRect.w));
-}
-
-static D2D1_RECT_L IntersectRect(const D2D1_RECT_L& aRect1,
- const D2D1_RECT_L& aRect2) {
- return D2D1::RectL(std::max(aRect1.left, aRect2.left),
- std::max(aRect1.top, aRect2.top),
- std::min(aRect1.right, aRect2.right),
- std::min(aRect1.bottom, aRect2.bottom));
-}
-
-IFACEMETHODIMP
-ExtendInputEffectD2D1::MapInputRectsToOutputRect(
- const D2D1_RECT_L* pInputRects, const D2D1_RECT_L* pInputOpaqueSubRects,
- UINT32 inputRectCount, D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pOutputOpaqueSubRect) {
- // This transform only accepts one input, so there will only be one input
- // rect.
- if (inputRectCount != 1) {
- return E_INVALIDARG;
- }
-
- // Set the output rect to the specified rect. This is the whole purpose of
- // this effect.
- *pOutputRect = ConvertFloatToLongRect(mOutputRect);
- *pOutputOpaqueSubRect = IntersectRect(*pOutputRect, pInputOpaqueSubRects[0]);
- return S_OK;
-}
-
-IFACEMETHODIMP
-ExtendInputEffectD2D1::MapOutputRectToInputRects(const D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pInputRects,
- UINT32 inputRectCount) const {
- if (inputRectCount != 1) {
- return E_INVALIDARG;
- }
-
- *pInputRects = *pOutputRect;
- return S_OK;
-}
-
-IFACEMETHODIMP
-ExtendInputEffectD2D1::MapInvalidRect(UINT32 inputIndex,
- D2D1_RECT_L invalidInputRect,
- D2D1_RECT_L* pInvalidOutputRect) const {
- MOZ_ASSERT(inputIndex == 0);
-
- *pInvalidOutputRect = invalidInputRect;
- return S_OK;
-}
-
-HRESULT
-ExtendInputEffectD2D1::Register(ID2D1Factory1* aFactory) {
- D2D1_PROPERTY_BINDING bindings[] = {
- D2D1_VALUE_TYPE_BINDING(L"OutputRect",
- &ExtendInputEffectD2D1::SetOutputRect,
- &ExtendInputEffectD2D1::GetOutputRect),
- };
- HRESULT hr = aFactory->RegisterEffectFromString(
- CLSID_ExtendInputEffect, kXmlDescription, bindings, 1, CreateEffect);
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to register extend input effect.";
- }
- return hr;
-}
-
-void ExtendInputEffectD2D1::Unregister(ID2D1Factory1* aFactory) {
- aFactory->UnregisterEffect(CLSID_ExtendInputEffect);
-}
-
-HRESULT __stdcall ExtendInputEffectD2D1::CreateEffect(IUnknown** aEffectImpl) {
- *aEffectImpl = static_cast<ID2D1EffectImpl*>(new ExtendInputEffectD2D1());
- (*aEffectImpl)->AddRef();
-
- return S_OK;
-}
-
-} // namespace gfx
-} // namespace mozilla
diff --git a/gfx/2d/ExtendInputEffectD2D1.h b/gfx/2d/ExtendInputEffectD2D1.h
@@ -1,86 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_EXTENDINPUTEFFECTD2D1_H_
-#define MOZILLA_GFX_EXTENDINPUTEFFECTD2D1_H_
-
-#include <d2d1_1.h>
-#include <d2d1effectauthor.h>
-#include <d2d1effecthelpers.h>
-
-#include "2D.h"
-
-// {97143DC6-CBC4-4DD4-A8BA-13342B0BA46D}
-DEFINE_GUID(CLSID_ExtendInputEffect, 0x5fb55c7c, 0xd795, 0x4ba3, 0xa9, 0x5c,
- 0x22, 0x82, 0x5d, 0x0c, 0x4d, 0xf7);
-
-namespace mozilla {
-namespace gfx {
-
-enum { EXTENDINPUT_PROP_OUTPUT_RECT = 0 };
-
-// An effect type that passes through its input unchanged but sets the effect's
-// output rect to a specified rect. Unlike the built-in Crop effect, the
-// ExtendInput effect can extend the input rect, and not just make it smaller.
-// The added margins are filled with transparent black.
-// Some effects have different output depending on their input effect's output
-// rect, for example the Border effect (which repeats the edges of its input
-// effect's output rect) or the component transfer and color matrix effects
-// (which can transform transparent pixels into non-transparent ones, but only
-// inside their input effect's output rect).
-class ExtendInputEffectD2D1 final : public ID2D1EffectImpl,
- public ID2D1DrawTransform {
- public:
- // ID2D1EffectImpl
- IFACEMETHODIMP Initialize(ID2D1EffectContext* pContextInternal,
- ID2D1TransformGraph* pTransformGraph);
- IFACEMETHODIMP PrepareForRender(D2D1_CHANGE_TYPE changeType);
- IFACEMETHODIMP SetGraph(ID2D1TransformGraph* pGraph);
-
- // IUnknown
- IFACEMETHODIMP_(ULONG) AddRef();
- IFACEMETHODIMP_(ULONG) Release();
- IFACEMETHODIMP QueryInterface(REFIID riid, void** ppOutput);
-
- // ID2D1Transform
- IFACEMETHODIMP MapInputRectsToOutputRect(
- const D2D1_RECT_L* pInputRects, const D2D1_RECT_L* pInputOpaqueSubRects,
- UINT32 inputRectCount, D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pOutputOpaqueSubRect);
- IFACEMETHODIMP MapOutputRectToInputRects(const D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pInputRects,
- UINT32 inputRectCount) const;
- IFACEMETHODIMP MapInvalidRect(UINT32 inputIndex, D2D1_RECT_L invalidInputRect,
- D2D1_RECT_L* pInvalidOutputRect) const;
-
- // ID2D1TransformNode
- IFACEMETHODIMP_(UINT32) GetInputCount() const { return 1; }
-
- // ID2D1DrawTransform
- IFACEMETHODIMP SetDrawInfo(ID2D1DrawInfo* pDrawInfo) { return S_OK; }
-
- static HRESULT Register(ID2D1Factory1* aFactory);
- static void Unregister(ID2D1Factory1* aFactory);
- static HRESULT __stdcall CreateEffect(IUnknown** aEffectImpl);
-
- HRESULT SetOutputRect(D2D1_VECTOR_4F aOutputRect) {
- mOutputRect = aOutputRect;
- return S_OK;
- }
- D2D1_VECTOR_4F GetOutputRect() const { return mOutputRect; }
-
- private:
- ExtendInputEffectD2D1();
-
- uint32_t mRefCount;
- D2D1_VECTOR_4F mOutputRect;
-};
-
-} // namespace gfx
-} // namespace mozilla
-#undef SIMPLE_PROP
-
-#endif
diff --git a/gfx/2d/Factory.cpp b/gfx/2d/Factory.cpp
@@ -42,14 +42,12 @@
#endif
#ifdef WIN32
-# include "DrawTargetD2D1.h"
-# include "PathD2D.h"
# include "ScaledFontDWrite.h"
# include "NativeFontResourceDWrite.h"
# include "UnscaledFontDWrite.h"
# include <d3d10_1.h>
# include <stdlib.h>
-# include "HelpersD2D.h"
+# include "HelpersWin.h"
# include "ImageContainer.h"
# include "mozilla/layers/LayersSurfaces.h"
# include "mozilla/layers/TextureD3D11.h"
@@ -228,16 +226,11 @@ already_AddRefed<SharedFTFace> FTUserFontData::CloneFace(int aFaceIndex) {
#ifdef WIN32
// Note: mDeviceLock must be held when mutating these values.
-static uint32_t mDeviceSeq = 0;
StaticRefPtr<ID3D11Device> Factory::mD3D11Device;
-StaticRefPtr<ID2D1Device> Factory::mD2D1Device;
StaticRefPtr<IDWriteFactory> Factory::mDWriteFactory;
-StaticRefPtr<ID2D1DeviceContext> Factory::mMTDC;
-StaticRefPtr<ID2D1DeviceContext> Factory::mOffMTDC;
bool Factory::mDWriteFactoryInitialized = false;
StaticRefPtr<IDWriteFontCollection> Factory::mDWriteSystemFonts;
StaticMutex Factory::mDeviceLock;
-StaticMutex Factory::mDTDependencyLock;
#endif
SubpixelOrder Factory::mSubpixelOrder = SubpixelOrder::UNKNOWN;
@@ -377,16 +370,6 @@ already_AddRefed<DrawTarget> Factory::CreateDrawTarget(BackendType aBackend,
RefPtr<DrawTarget> retVal;
switch (aBackend) {
-#ifdef WIN32
- case BackendType::DIRECT2D1_1: {
- RefPtr<DrawTargetD2D1> newTarget;
- newTarget = new DrawTargetD2D1();
- if (newTarget->Init(aSize, aFormat)) {
- retVal = newTarget;
- }
- break;
- }
-#endif
case BackendType::SKIA: {
RefPtr<DrawTargetSkia> newTarget;
newTarget = new DrawTargetSkia();
@@ -422,10 +405,6 @@ already_AddRefed<DrawTarget> Factory::CreateDrawTarget(BackendType aBackend,
already_AddRefed<PathBuilder> Factory::CreatePathBuilder(BackendType aBackend,
FillRule aFillRule) {
switch (aBackend) {
-#ifdef WIN32
- case BackendType::DIRECT2D1_1:
- return PathBuilderD2D::Create(aFillRule);
-#endif
case BackendType::SKIA:
case BackendType::WEBGL:
return PathBuilderSkia::Create(aFillRule);
@@ -510,8 +489,6 @@ already_AddRefed<DrawTarget> Factory::CreateOffsetDrawTarget(
bool Factory::DoesBackendSupportDataDrawtarget(BackendType aType) {
switch (aType) {
- case BackendType::DIRECT2D:
- case BackendType::DIRECT2D1_1:
case BackendType::RECORDING:
case BackendType::NONE:
case BackendType::BACKEND_LAST:
@@ -532,10 +509,6 @@ uint32_t Factory::GetMaxSurfaceSize(BackendType aType) {
return DrawTargetCairo::GetMaxSurfaceSize();
case BackendType::SKIA:
return DrawTargetSkia::GetMaxSurfaceSize();
-#ifdef WIN32
- case BackendType::DIRECT2D1_1:
- return DrawTargetD2D1::GetMaxSurfaceSize();
-#endif
default:
return 0;
}
@@ -750,91 +723,13 @@ FT_Error Factory::LoadFTGlyph(FT_Face aFace, uint32_t aGlyphIndex,
}
#endif
-AutoSerializeWithMoz2D::AutoSerializeWithMoz2D(BackendType aBackendType) {
-#ifdef WIN32
- // We use a multi-threaded ID2D1Factory1, so that makes the calls through the
- // Direct2D API thread-safe. However, if the Moz2D objects are using Direct3D
- // resources we need to make sure that calls through the Direct3D or DXGI API
- // use the Direct2D synchronization. It's possible that this should be pushed
- // down into the TextureD3D11 objects, so that we always use this.
- if (aBackendType == BackendType::DIRECT2D1_1 ||
- aBackendType == BackendType::DIRECT2D) {
- auto factory = D2DFactory();
- if (factory) {
- factory->QueryInterface(
- static_cast<ID2D1Multithread**>(getter_AddRefs(mMT)));
- if (mMT) {
- mMT->Enter();
- }
- }
- }
-#endif
-}
-
-AutoSerializeWithMoz2D::~AutoSerializeWithMoz2D() {
-#ifdef WIN32
- if (mMT) {
- mMT->Leave();
- }
-#endif
-};
-
#ifdef WIN32
-already_AddRefed<DrawTarget> Factory::CreateDrawTargetForD3D11Texture(
- ID3D11Texture2D* aTexture, SurfaceFormat aFormat) {
- MOZ_ASSERT(aTexture);
-
- RefPtr<DrawTargetD2D1> newTarget;
-
- newTarget = new DrawTargetD2D1();
- if (newTarget->Init(aTexture, aFormat)) {
- RefPtr<DrawTarget> retVal = newTarget;
- return retVal.forget();
- }
-
- gfxWarning() << "Failed to create draw target for D3D11 texture.";
-
- // Failed
- return nullptr;
-}
-
bool Factory::SetDirect3D11Device(ID3D11Device* aDevice) {
MOZ_RELEASE_ASSERT(NS_IsMainThread());
- // D2DFactory already takes the device lock, so we get the factory before
- // entering the lock scope.
- RefPtr<ID2D1Factory1> factory = D2DFactory();
-
StaticMutexAutoLock lock(mDeviceLock);
mD3D11Device = aDevice;
-
- if (mD2D1Device) {
- mD2D1Device = nullptr;
- mMTDC = nullptr;
- mOffMTDC = nullptr;
- }
-
- if (!aDevice) {
- return true;
- }
-
- RefPtr<IDXGIDevice> device;
- aDevice->QueryInterface((IDXGIDevice**)getter_AddRefs(device));
-
- RefPtr<ID2D1Device> d2dDevice;
- HRESULT hr = factory->CreateDevice(device, getter_AddRefs(d2dDevice));
- if (FAILED(hr)) {
- gfxCriticalError()
- << "[D2D1] Failed to create gfx factory's D2D1 device, code: "
- << hexa(hr);
-
- mD3D11Device = nullptr;
- return false;
- }
-
- mDeviceSeq++;
- mD2D1Device = d2dDevice;
return true;
}
@@ -843,16 +738,6 @@ RefPtr<ID3D11Device> Factory::GetDirect3D11Device() {
return mD3D11Device;
}
-RefPtr<ID2D1Device> Factory::GetD2D1Device(uint32_t* aOutSeqNo) {
- StaticMutexAutoLock lock(mDeviceLock);
- if (aOutSeqNo) {
- *aOutSeqNo = mDeviceSeq;
- }
- return mD2D1Device.get();
-}
-
-bool Factory::HasD2D1Device() { return !!GetD2D1Device(); }
-
RefPtr<IDWriteFactory> Factory::GetDWriteFactory() {
StaticMutexAutoLock lock(mDeviceLock);
return mDWriteFactory;
@@ -925,63 +810,11 @@ RefPtr<IDWriteFontCollection> Factory::GetDWriteSystemFonts(bool aUpdate) {
return mDWriteSystemFonts;
}
-RefPtr<ID2D1DeviceContext> Factory::GetD2DDeviceContext() {
- StaticRefPtr<ID2D1DeviceContext>* ptr;
-
- if (NS_IsMainThread()) {
- ptr = &mMTDC;
- } else {
- ptr = &mOffMTDC;
- }
-
- if (*ptr) {
- return *ptr;
- }
-
- RefPtr<ID2D1Device> device = GetD2D1Device();
-
- if (!device) {
- return nullptr;
- }
-
- RefPtr<ID2D1DeviceContext> dc;
- HRESULT hr = device->CreateDeviceContext(
- D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS,
- getter_AddRefs(dc));
-
- if (FAILED(hr)) {
- gfxCriticalError() << "Failed to create global device context";
- return nullptr;
- }
-
- *ptr = dc;
-
- return *ptr;
-}
-
-bool Factory::SupportsD2D1() { return !!D2DFactory(); }
-
BYTE sSystemTextQuality = CLEARTYPE_QUALITY;
void Factory::SetSystemTextQuality(uint8_t aQuality) {
sSystemTextQuality = aQuality;
}
-uint64_t Factory::GetD2DVRAMUsageDrawTarget() {
- return DrawTargetD2D1::mVRAMUsageDT;
-}
-
-uint64_t Factory::GetD2DVRAMUsageSourceSurface() {
- return DrawTargetD2D1::mVRAMUsageSS;
-}
-
-void Factory::D2DCleanup() {
- StaticMutexAutoLock lock(mDeviceLock);
- if (mD2D1Device) {
- mD2D1Device = nullptr;
- }
- DrawTargetD2D1::CleanupD2D();
-}
-
already_AddRefed<ScaledFont> Factory::CreateScaledFontForDWriteFont(
IDWriteFontFace* aFontFace, const gfxFontStyle* aStyle,
const RefPtr<UnscaledFont>& aUnscaledFont, float aSize,
diff --git a/gfx/2d/FilterNodeD2D1.cpp b/gfx/2d/FilterNodeD2D1.cpp
@@ -1,1259 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "FilterNodeD2D1.h"
-
-#include "Logging.h"
-
-#include "SourceSurfaceD2D1.h"
-#include "DrawTargetD2D1.h"
-#include "ExtendInputEffectD2D1.h"
-
-namespace mozilla {
-namespace gfx {
-
-D2D1_COLORMATRIX_ALPHA_MODE D2DAlphaMode(uint32_t aMode) {
- switch (aMode) {
- case ALPHA_MODE_PREMULTIPLIED:
- return D2D1_COLORMATRIX_ALPHA_MODE_PREMULTIPLIED;
- case ALPHA_MODE_STRAIGHT:
- return D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT;
- default:
- MOZ_CRASH("GFX: Unknown enum value D2DAlphaMode!");
- }
-
- return D2D1_COLORMATRIX_ALPHA_MODE_PREMULTIPLIED;
-}
-
-D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE D2DAffineTransformInterpolationMode(
- SamplingFilter aSamplingFilter) {
- switch (aSamplingFilter) {
- case SamplingFilter::GOOD:
- return D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR;
- case SamplingFilter::LINEAR:
- return D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR;
- case SamplingFilter::POINT:
- return D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR;
- default:
- MOZ_CRASH("GFX: Unknown enum value D2DAffineTIM!");
- }
-
- return D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR;
-}
-
-D2D1_BLEND_MODE D2DBlendMode(uint32_t aMode) {
- switch (aMode) {
- case BLEND_MODE_DARKEN:
- return D2D1_BLEND_MODE_DARKEN;
- case BLEND_MODE_LIGHTEN:
- return D2D1_BLEND_MODE_LIGHTEN;
- case BLEND_MODE_MULTIPLY:
- return D2D1_BLEND_MODE_MULTIPLY;
- case BLEND_MODE_SCREEN:
- return D2D1_BLEND_MODE_SCREEN;
- case BLEND_MODE_OVERLAY:
- return D2D1_BLEND_MODE_OVERLAY;
- case BLEND_MODE_COLOR_DODGE:
- return D2D1_BLEND_MODE_COLOR_DODGE;
- case BLEND_MODE_COLOR_BURN:
- return D2D1_BLEND_MODE_COLOR_BURN;
- case BLEND_MODE_HARD_LIGHT:
- return D2D1_BLEND_MODE_HARD_LIGHT;
- case BLEND_MODE_SOFT_LIGHT:
- return D2D1_BLEND_MODE_SOFT_LIGHT;
- case BLEND_MODE_DIFFERENCE:
- return D2D1_BLEND_MODE_DIFFERENCE;
- case BLEND_MODE_EXCLUSION:
- return D2D1_BLEND_MODE_EXCLUSION;
- case BLEND_MODE_HUE:
- return D2D1_BLEND_MODE_HUE;
- case BLEND_MODE_SATURATION:
- return D2D1_BLEND_MODE_SATURATION;
- case BLEND_MODE_COLOR:
- return D2D1_BLEND_MODE_COLOR;
- case BLEND_MODE_LUMINOSITY:
- return D2D1_BLEND_MODE_LUMINOSITY;
-
- default:
- MOZ_CRASH("GFX: Unknown enum value D2DBlendMode!");
- }
-
- return D2D1_BLEND_MODE_DARKEN;
-}
-
-D2D1_MORPHOLOGY_MODE D2DMorphologyMode(uint32_t aMode) {
- switch (aMode) {
- case MORPHOLOGY_OPERATOR_DILATE:
- return D2D1_MORPHOLOGY_MODE_DILATE;
- case MORPHOLOGY_OPERATOR_ERODE:
- return D2D1_MORPHOLOGY_MODE_ERODE;
- }
-
- MOZ_CRASH("GFX: Unknown enum value D2DMorphologyMode!");
- return D2D1_MORPHOLOGY_MODE_DILATE;
-}
-
-D2D1_TURBULENCE_NOISE D2DTurbulenceNoise(uint32_t aMode) {
- switch (aMode) {
- case TURBULENCE_TYPE_FRACTAL_NOISE:
- return D2D1_TURBULENCE_NOISE_FRACTAL_SUM;
- case TURBULENCE_TYPE_TURBULENCE:
- return D2D1_TURBULENCE_NOISE_TURBULENCE;
- }
-
- MOZ_CRASH("GFX: Unknown enum value D2DTurbulenceNoise!");
- return D2D1_TURBULENCE_NOISE_TURBULENCE;
-}
-
-D2D1_COMPOSITE_MODE D2DFilterCompositionMode(uint32_t aMode) {
- switch (aMode) {
- case COMPOSITE_OPERATOR_OVER:
- return D2D1_COMPOSITE_MODE_SOURCE_OVER;
- case COMPOSITE_OPERATOR_IN:
- return D2D1_COMPOSITE_MODE_SOURCE_IN;
- case COMPOSITE_OPERATOR_OUT:
- return D2D1_COMPOSITE_MODE_SOURCE_OUT;
- case COMPOSITE_OPERATOR_ATOP:
- return D2D1_COMPOSITE_MODE_SOURCE_ATOP;
- case COMPOSITE_OPERATOR_XOR:
- return D2D1_COMPOSITE_MODE_XOR;
- case COMPOSITE_OPERATOR_LIGHTER:
- return D2D1_COMPOSITE_MODE_PLUS;
- }
-
- MOZ_CRASH("GFX: Unknown enum value D2DFilterCompositionMode!");
- return D2D1_COMPOSITE_MODE_SOURCE_OVER;
-}
-
-D2D1_CHANNEL_SELECTOR D2DChannelSelector(uint32_t aMode) {
- switch (aMode) {
- case COLOR_CHANNEL_R:
- return D2D1_CHANNEL_SELECTOR_R;
- case COLOR_CHANNEL_G:
- return D2D1_CHANNEL_SELECTOR_G;
- case COLOR_CHANNEL_B:
- return D2D1_CHANNEL_SELECTOR_B;
- case COLOR_CHANNEL_A:
- return D2D1_CHANNEL_SELECTOR_A;
- }
-
- MOZ_CRASH("GFX: Unknown enum value D2DChannelSelector!");
- return D2D1_CHANNEL_SELECTOR_R;
-}
-
-already_AddRefed<ID2D1Image> GetImageForSourceSurface(DrawTarget* aDT,
- SourceSurface* aSurface) {
- if (aDT->IsTiledDrawTarget()) {
- gfxDevCrash(LogReason::FilterNodeD2D1Target)
- << "Incompatible draw target type! " << (int)aDT->IsTiledDrawTarget();
- return nullptr;
- }
- switch (aDT->GetBackendType()) {
- case BackendType::DIRECT2D1_1:
- return static_cast<DrawTargetD2D1*>(aDT)->GetImageForSurface(
- aSurface, ExtendMode::CLAMP);
- default:
- gfxDevCrash(LogReason::FilterNodeD2D1Backend)
- << "Unknown draw target type! " << (int)aDT->GetBackendType();
- return nullptr;
- }
-}
-
-uint32_t ConvertValue(FilterType aType, uint32_t aAttribute, uint32_t aValue) {
- switch (aType) {
- case FilterType::COLOR_MATRIX:
- if (aAttribute == ATT_COLOR_MATRIX_ALPHA_MODE) {
- aValue = D2DAlphaMode(aValue);
- }
- break;
- case FilterType::TRANSFORM:
- if (aAttribute == ATT_TRANSFORM_FILTER) {
- aValue = D2DAffineTransformInterpolationMode(SamplingFilter(aValue));
- }
- break;
- case FilterType::BLEND:
- if (aAttribute == ATT_BLEND_BLENDMODE) {
- aValue = D2DBlendMode(aValue);
- }
- break;
- case FilterType::MORPHOLOGY:
- if (aAttribute == ATT_MORPHOLOGY_OPERATOR) {
- aValue = D2DMorphologyMode(aValue);
- }
- break;
- case FilterType::DISPLACEMENT_MAP:
- if (aAttribute == ATT_DISPLACEMENT_MAP_X_CHANNEL ||
- aAttribute == ATT_DISPLACEMENT_MAP_Y_CHANNEL) {
- aValue = D2DChannelSelector(aValue);
- }
- break;
- case FilterType::TURBULENCE:
- if (aAttribute == ATT_TURBULENCE_TYPE) {
- aValue = D2DTurbulenceNoise(aValue);
- }
- break;
- case FilterType::COMPOSITE:
- if (aAttribute == ATT_COMPOSITE_OPERATOR) {
- aValue = D2DFilterCompositionMode(aValue);
- }
- break;
- default:
- break;
- }
-
- return aValue;
-}
-
-void ConvertValue(FilterType aType, uint32_t aAttribute, IntSize& aValue) {
- switch (aType) {
- case FilterType::MORPHOLOGY:
- if (aAttribute == ATT_MORPHOLOGY_RADII) {
- aValue.width *= 2;
- aValue.width += 1;
- aValue.height *= 2;
- aValue.height += 1;
- }
- break;
- default:
- break;
- }
-}
-
-UINT32
-GetD2D1InputForInput(FilterType aType, uint32_t aIndex) { return aIndex; }
-
-#define CONVERT_PROP(moz2dname, d2dname) \
- case ATT_##moz2dname: \
- return D2D1_##d2dname
-
-UINT32
-GetD2D1PropForAttribute(FilterType aType, uint32_t aIndex) {
- switch (aType) {
- case FilterType::COLOR_MATRIX:
- switch (aIndex) {
- CONVERT_PROP(COLOR_MATRIX_MATRIX, COLORMATRIX_PROP_COLOR_MATRIX);
- CONVERT_PROP(COLOR_MATRIX_ALPHA_MODE, COLORMATRIX_PROP_ALPHA_MODE);
- }
- break;
- case FilterType::TRANSFORM:
- switch (aIndex) {
- CONVERT_PROP(TRANSFORM_MATRIX, 2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX);
- CONVERT_PROP(TRANSFORM_FILTER,
- 2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE);
- }
- case FilterType::BLEND:
- switch (aIndex) { CONVERT_PROP(BLEND_BLENDMODE, BLEND_PROP_MODE); }
- break;
- case FilterType::MORPHOLOGY:
- switch (aIndex) {
- CONVERT_PROP(MORPHOLOGY_OPERATOR, MORPHOLOGY_PROP_MODE);
- }
- break;
- case FilterType::FLOOD:
- switch (aIndex) { CONVERT_PROP(FLOOD_COLOR, FLOOD_PROP_COLOR); }
- break;
- case FilterType::TILE:
- switch (aIndex) { CONVERT_PROP(TILE_SOURCE_RECT, TILE_PROP_RECT); }
- break;
- case FilterType::TABLE_TRANSFER:
- switch (aIndex) {
- CONVERT_PROP(TABLE_TRANSFER_DISABLE_R, TABLETRANSFER_PROP_RED_DISABLE);
- CONVERT_PROP(TABLE_TRANSFER_DISABLE_G,
- TABLETRANSFER_PROP_GREEN_DISABLE);
- CONVERT_PROP(TABLE_TRANSFER_DISABLE_B, TABLETRANSFER_PROP_BLUE_DISABLE);
- CONVERT_PROP(TABLE_TRANSFER_DISABLE_A,
- TABLETRANSFER_PROP_ALPHA_DISABLE);
- CONVERT_PROP(TABLE_TRANSFER_TABLE_R, TABLETRANSFER_PROP_RED_TABLE);
- CONVERT_PROP(TABLE_TRANSFER_TABLE_G, TABLETRANSFER_PROP_GREEN_TABLE);
- CONVERT_PROP(TABLE_TRANSFER_TABLE_B, TABLETRANSFER_PROP_BLUE_TABLE);
- CONVERT_PROP(TABLE_TRANSFER_TABLE_A, TABLETRANSFER_PROP_ALPHA_TABLE);
- }
- break;
- case FilterType::DISCRETE_TRANSFER:
- switch (aIndex) {
- CONVERT_PROP(DISCRETE_TRANSFER_DISABLE_R,
- DISCRETETRANSFER_PROP_RED_DISABLE);
- CONVERT_PROP(DISCRETE_TRANSFER_DISABLE_G,
- DISCRETETRANSFER_PROP_GREEN_DISABLE);
- CONVERT_PROP(DISCRETE_TRANSFER_DISABLE_B,
- DISCRETETRANSFER_PROP_BLUE_DISABLE);
- CONVERT_PROP(DISCRETE_TRANSFER_DISABLE_A,
- DISCRETETRANSFER_PROP_ALPHA_DISABLE);
- CONVERT_PROP(DISCRETE_TRANSFER_TABLE_R,
- DISCRETETRANSFER_PROP_RED_TABLE);
- CONVERT_PROP(DISCRETE_TRANSFER_TABLE_G,
- DISCRETETRANSFER_PROP_GREEN_TABLE);
- CONVERT_PROP(DISCRETE_TRANSFER_TABLE_B,
- DISCRETETRANSFER_PROP_BLUE_TABLE);
- CONVERT_PROP(DISCRETE_TRANSFER_TABLE_A,
- DISCRETETRANSFER_PROP_ALPHA_TABLE);
- }
- break;
- case FilterType::LINEAR_TRANSFER:
- switch (aIndex) {
- CONVERT_PROP(LINEAR_TRANSFER_DISABLE_R,
- LINEARTRANSFER_PROP_RED_DISABLE);
- CONVERT_PROP(LINEAR_TRANSFER_DISABLE_G,
- LINEARTRANSFER_PROP_GREEN_DISABLE);
- CONVERT_PROP(LINEAR_TRANSFER_DISABLE_B,
- LINEARTRANSFER_PROP_BLUE_DISABLE);
- CONVERT_PROP(LINEAR_TRANSFER_DISABLE_A,
- LINEARTRANSFER_PROP_ALPHA_DISABLE);
- CONVERT_PROP(LINEAR_TRANSFER_INTERCEPT_R,
- LINEARTRANSFER_PROP_RED_Y_INTERCEPT);
- CONVERT_PROP(LINEAR_TRANSFER_INTERCEPT_G,
- LINEARTRANSFER_PROP_GREEN_Y_INTERCEPT);
- CONVERT_PROP(LINEAR_TRANSFER_INTERCEPT_B,
- LINEARTRANSFER_PROP_BLUE_Y_INTERCEPT);
- CONVERT_PROP(LINEAR_TRANSFER_INTERCEPT_A,
- LINEARTRANSFER_PROP_ALPHA_Y_INTERCEPT);
- CONVERT_PROP(LINEAR_TRANSFER_SLOPE_R, LINEARTRANSFER_PROP_RED_SLOPE);
- CONVERT_PROP(LINEAR_TRANSFER_SLOPE_G, LINEARTRANSFER_PROP_GREEN_SLOPE);
- CONVERT_PROP(LINEAR_TRANSFER_SLOPE_B, LINEARTRANSFER_PROP_BLUE_SLOPE);
- CONVERT_PROP(LINEAR_TRANSFER_SLOPE_A, LINEARTRANSFER_PROP_ALPHA_SLOPE);
- }
- break;
- case FilterType::GAMMA_TRANSFER:
- switch (aIndex) {
- CONVERT_PROP(GAMMA_TRANSFER_DISABLE_R, GAMMATRANSFER_PROP_RED_DISABLE);
- CONVERT_PROP(GAMMA_TRANSFER_DISABLE_G,
- GAMMATRANSFER_PROP_GREEN_DISABLE);
- CONVERT_PROP(GAMMA_TRANSFER_DISABLE_B, GAMMATRANSFER_PROP_BLUE_DISABLE);
- CONVERT_PROP(GAMMA_TRANSFER_DISABLE_A,
- GAMMATRANSFER_PROP_ALPHA_DISABLE);
- CONVERT_PROP(GAMMA_TRANSFER_AMPLITUDE_R,
- GAMMATRANSFER_PROP_RED_AMPLITUDE);
- CONVERT_PROP(GAMMA_TRANSFER_AMPLITUDE_G,
- GAMMATRANSFER_PROP_GREEN_AMPLITUDE);
- CONVERT_PROP(GAMMA_TRANSFER_AMPLITUDE_B,
- GAMMATRANSFER_PROP_BLUE_AMPLITUDE);
- CONVERT_PROP(GAMMA_TRANSFER_AMPLITUDE_A,
- GAMMATRANSFER_PROP_ALPHA_AMPLITUDE);
- CONVERT_PROP(GAMMA_TRANSFER_EXPONENT_R,
- GAMMATRANSFER_PROP_RED_EXPONENT);
- CONVERT_PROP(GAMMA_TRANSFER_EXPONENT_G,
- GAMMATRANSFER_PROP_GREEN_EXPONENT);
- CONVERT_PROP(GAMMA_TRANSFER_EXPONENT_B,
- GAMMATRANSFER_PROP_BLUE_EXPONENT);
- CONVERT_PROP(GAMMA_TRANSFER_EXPONENT_A,
- GAMMATRANSFER_PROP_ALPHA_EXPONENT);
- CONVERT_PROP(GAMMA_TRANSFER_OFFSET_R, GAMMATRANSFER_PROP_RED_OFFSET);
- CONVERT_PROP(GAMMA_TRANSFER_OFFSET_G, GAMMATRANSFER_PROP_GREEN_OFFSET);
- CONVERT_PROP(GAMMA_TRANSFER_OFFSET_B, GAMMATRANSFER_PROP_BLUE_OFFSET);
- CONVERT_PROP(GAMMA_TRANSFER_OFFSET_A, GAMMATRANSFER_PROP_ALPHA_OFFSET);
- }
- break;
- case FilterType::CONVOLVE_MATRIX:
- switch (aIndex) {
- CONVERT_PROP(CONVOLVE_MATRIX_BIAS, CONVOLVEMATRIX_PROP_BIAS);
- CONVERT_PROP(CONVOLVE_MATRIX_KERNEL_MATRIX,
- CONVOLVEMATRIX_PROP_KERNEL_MATRIX);
- CONVERT_PROP(CONVOLVE_MATRIX_DIVISOR, CONVOLVEMATRIX_PROP_DIVISOR);
- CONVERT_PROP(CONVOLVE_MATRIX_KERNEL_UNIT_LENGTH,
- CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH);
- CONVERT_PROP(CONVOLVE_MATRIX_PRESERVE_ALPHA,
- CONVOLVEMATRIX_PROP_PRESERVE_ALPHA);
- }
- case FilterType::DISPLACEMENT_MAP:
- switch (aIndex) {
- CONVERT_PROP(DISPLACEMENT_MAP_SCALE, DISPLACEMENTMAP_PROP_SCALE);
- CONVERT_PROP(DISPLACEMENT_MAP_X_CHANNEL,
- DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT);
- CONVERT_PROP(DISPLACEMENT_MAP_Y_CHANNEL,
- DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT);
- }
- break;
- case FilterType::TURBULENCE:
- switch (aIndex) {
- CONVERT_PROP(TURBULENCE_BASE_FREQUENCY, TURBULENCE_PROP_BASE_FREQUENCY);
- CONVERT_PROP(TURBULENCE_NUM_OCTAVES, TURBULENCE_PROP_NUM_OCTAVES);
- CONVERT_PROP(TURBULENCE_SEED, TURBULENCE_PROP_SEED);
- CONVERT_PROP(TURBULENCE_STITCHABLE, TURBULENCE_PROP_STITCHABLE);
- CONVERT_PROP(TURBULENCE_TYPE, TURBULENCE_PROP_NOISE);
- }
- break;
- case FilterType::ARITHMETIC_COMBINE:
- switch (aIndex) {
- CONVERT_PROP(ARITHMETIC_COMBINE_COEFFICIENTS,
- ARITHMETICCOMPOSITE_PROP_COEFFICIENTS);
- }
- break;
- case FilterType::COMPOSITE:
- switch (aIndex) { CONVERT_PROP(COMPOSITE_OPERATOR, COMPOSITE_PROP_MODE); }
- break;
- case FilterType::GAUSSIAN_BLUR:
- switch (aIndex) {
- CONVERT_PROP(GAUSSIAN_BLUR_STD_DEVIATION,
- GAUSSIANBLUR_PROP_STANDARD_DEVIATION);
- }
- break;
- case FilterType::DIRECTIONAL_BLUR:
- switch (aIndex) {
- CONVERT_PROP(DIRECTIONAL_BLUR_STD_DEVIATION,
- DIRECTIONALBLUR_PROP_STANDARD_DEVIATION);
- CONVERT_PROP(DIRECTIONAL_BLUR_DIRECTION, DIRECTIONALBLUR_PROP_ANGLE);
- }
- break;
- case FilterType::POINT_DIFFUSE:
- switch (aIndex) {
- CONVERT_PROP(POINT_DIFFUSE_DIFFUSE_CONSTANT,
- POINTDIFFUSE_PROP_DIFFUSE_CONSTANT);
- CONVERT_PROP(POINT_DIFFUSE_POSITION, POINTDIFFUSE_PROP_LIGHT_POSITION);
- CONVERT_PROP(POINT_DIFFUSE_COLOR, POINTDIFFUSE_PROP_COLOR);
- CONVERT_PROP(POINT_DIFFUSE_SURFACE_SCALE,
- POINTDIFFUSE_PROP_SURFACE_SCALE);
- CONVERT_PROP(POINT_DIFFUSE_KERNEL_UNIT_LENGTH,
- POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH);
- }
- break;
- case FilterType::SPOT_DIFFUSE:
- switch (aIndex) {
- CONVERT_PROP(SPOT_DIFFUSE_DIFFUSE_CONSTANT,
- SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT);
- CONVERT_PROP(SPOT_DIFFUSE_POINTS_AT, SPOTDIFFUSE_PROP_POINTS_AT);
- CONVERT_PROP(SPOT_DIFFUSE_FOCUS, SPOTDIFFUSE_PROP_FOCUS);
- CONVERT_PROP(SPOT_DIFFUSE_LIMITING_CONE_ANGLE,
- SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE);
- CONVERT_PROP(SPOT_DIFFUSE_POSITION, SPOTDIFFUSE_PROP_LIGHT_POSITION);
- CONVERT_PROP(SPOT_DIFFUSE_COLOR, SPOTDIFFUSE_PROP_COLOR);
- CONVERT_PROP(SPOT_DIFFUSE_SURFACE_SCALE,
- SPOTDIFFUSE_PROP_SURFACE_SCALE);
- CONVERT_PROP(SPOT_DIFFUSE_KERNEL_UNIT_LENGTH,
- SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH);
- }
- break;
- case FilterType::DISTANT_DIFFUSE:
- switch (aIndex) {
- CONVERT_PROP(DISTANT_DIFFUSE_DIFFUSE_CONSTANT,
- DISTANTDIFFUSE_PROP_DIFFUSE_CONSTANT);
- CONVERT_PROP(DISTANT_DIFFUSE_AZIMUTH, DISTANTDIFFUSE_PROP_AZIMUTH);
- CONVERT_PROP(DISTANT_DIFFUSE_ELEVATION, DISTANTDIFFUSE_PROP_ELEVATION);
- CONVERT_PROP(DISTANT_DIFFUSE_COLOR, DISTANTDIFFUSE_PROP_COLOR);
- CONVERT_PROP(DISTANT_DIFFUSE_SURFACE_SCALE,
- DISTANTDIFFUSE_PROP_SURFACE_SCALE);
- CONVERT_PROP(DISTANT_DIFFUSE_KERNEL_UNIT_LENGTH,
- DISTANTDIFFUSE_PROP_KERNEL_UNIT_LENGTH);
- }
- break;
- case FilterType::POINT_SPECULAR:
- switch (aIndex) {
- CONVERT_PROP(POINT_SPECULAR_SPECULAR_CONSTANT,
- POINTSPECULAR_PROP_SPECULAR_CONSTANT);
- CONVERT_PROP(POINT_SPECULAR_SPECULAR_EXPONENT,
- POINTSPECULAR_PROP_SPECULAR_EXPONENT);
- CONVERT_PROP(POINT_SPECULAR_POSITION,
- POINTSPECULAR_PROP_LIGHT_POSITION);
- CONVERT_PROP(POINT_SPECULAR_COLOR, POINTSPECULAR_PROP_COLOR);
- CONVERT_PROP(POINT_SPECULAR_SURFACE_SCALE,
- POINTSPECULAR_PROP_SURFACE_SCALE);
- CONVERT_PROP(POINT_SPECULAR_KERNEL_UNIT_LENGTH,
- POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH);
- }
- break;
- case FilterType::SPOT_SPECULAR:
- switch (aIndex) {
- CONVERT_PROP(SPOT_SPECULAR_SPECULAR_CONSTANT,
- SPOTSPECULAR_PROP_SPECULAR_CONSTANT);
- CONVERT_PROP(SPOT_SPECULAR_SPECULAR_EXPONENT,
- SPOTSPECULAR_PROP_SPECULAR_EXPONENT);
- CONVERT_PROP(SPOT_SPECULAR_POINTS_AT, SPOTSPECULAR_PROP_POINTS_AT);
- CONVERT_PROP(SPOT_SPECULAR_FOCUS, SPOTSPECULAR_PROP_FOCUS);
- CONVERT_PROP(SPOT_SPECULAR_LIMITING_CONE_ANGLE,
- SPOTSPECULAR_PROP_LIMITING_CONE_ANGLE);
- CONVERT_PROP(SPOT_SPECULAR_POSITION, SPOTSPECULAR_PROP_LIGHT_POSITION);
- CONVERT_PROP(SPOT_SPECULAR_COLOR, SPOTSPECULAR_PROP_COLOR);
- CONVERT_PROP(SPOT_SPECULAR_SURFACE_SCALE,
- SPOTSPECULAR_PROP_SURFACE_SCALE);
- CONVERT_PROP(SPOT_SPECULAR_KERNEL_UNIT_LENGTH,
- SPOTSPECULAR_PROP_KERNEL_UNIT_LENGTH);
- }
- break;
- case FilterType::DISTANT_SPECULAR:
- switch (aIndex) {
- CONVERT_PROP(DISTANT_SPECULAR_SPECULAR_CONSTANT,
- DISTANTSPECULAR_PROP_SPECULAR_CONSTANT);
- CONVERT_PROP(DISTANT_SPECULAR_SPECULAR_EXPONENT,
- DISTANTSPECULAR_PROP_SPECULAR_EXPONENT);
- CONVERT_PROP(DISTANT_SPECULAR_AZIMUTH, DISTANTSPECULAR_PROP_AZIMUTH);
- CONVERT_PROP(DISTANT_SPECULAR_ELEVATION,
- DISTANTSPECULAR_PROP_ELEVATION);
- CONVERT_PROP(DISTANT_SPECULAR_COLOR, DISTANTSPECULAR_PROP_COLOR);
- CONVERT_PROP(DISTANT_SPECULAR_SURFACE_SCALE,
- DISTANTSPECULAR_PROP_SURFACE_SCALE);
- CONVERT_PROP(DISTANT_SPECULAR_KERNEL_UNIT_LENGTH,
- DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH);
- }
- break;
- case FilterType::CROP:
- switch (aIndex) { CONVERT_PROP(CROP_RECT, CROP_PROP_RECT); }
- break;
- default:
- break;
- }
-
- return UINT32_MAX;
-}
-
-bool GetD2D1PropsForIntSize(FilterType aType, uint32_t aIndex,
- UINT32* aPropWidth, UINT32* aPropHeight) {
- switch (aType) {
- case FilterType::MORPHOLOGY:
- if (aIndex == ATT_MORPHOLOGY_RADII) {
- *aPropWidth = D2D1_MORPHOLOGY_PROP_WIDTH;
- *aPropHeight = D2D1_MORPHOLOGY_PROP_HEIGHT;
- return true;
- }
- break;
- default:
- break;
- }
- return false;
-}
-
-static inline REFCLSID GetCLDIDForFilterType(FilterType aType) {
- switch (aType) {
- case FilterType::OPACITY:
- case FilterType::COLOR_MATRIX:
- return CLSID_D2D1ColorMatrix;
- case FilterType::TRANSFORM:
- return CLSID_D2D12DAffineTransform;
- case FilterType::BLEND:
- return CLSID_D2D1Blend;
- case FilterType::MORPHOLOGY:
- return CLSID_D2D1Morphology;
- case FilterType::FLOOD:
- return CLSID_D2D1Flood;
- case FilterType::TILE:
- return CLSID_D2D1Tile;
- case FilterType::TABLE_TRANSFER:
- return CLSID_D2D1TableTransfer;
- case FilterType::LINEAR_TRANSFER:
- return CLSID_D2D1LinearTransfer;
- case FilterType::DISCRETE_TRANSFER:
- return CLSID_D2D1DiscreteTransfer;
- case FilterType::GAMMA_TRANSFER:
- return CLSID_D2D1GammaTransfer;
- case FilterType::DISPLACEMENT_MAP:
- return CLSID_D2D1DisplacementMap;
- case FilterType::TURBULENCE:
- return CLSID_D2D1Turbulence;
- case FilterType::ARITHMETIC_COMBINE:
- return CLSID_D2D1ArithmeticComposite;
- case FilterType::COMPOSITE:
- return CLSID_D2D1Composite;
- case FilterType::CONVOLVE_MATRIX:
- return CLSID_D2D1ConvolveMatrix;
- case FilterType::GAUSSIAN_BLUR:
- return CLSID_D2D1GaussianBlur;
- case FilterType::DIRECTIONAL_BLUR:
- return CLSID_D2D1DirectionalBlur;
- case FilterType::POINT_DIFFUSE:
- return CLSID_D2D1PointDiffuse;
- case FilterType::POINT_SPECULAR:
- return CLSID_D2D1PointSpecular;
- case FilterType::SPOT_DIFFUSE:
- return CLSID_D2D1SpotDiffuse;
- case FilterType::SPOT_SPECULAR:
- return CLSID_D2D1SpotSpecular;
- case FilterType::DISTANT_DIFFUSE:
- return CLSID_D2D1DistantDiffuse;
- case FilterType::DISTANT_SPECULAR:
- return CLSID_D2D1DistantSpecular;
- case FilterType::CROP:
- return CLSID_D2D1Crop;
- case FilterType::PREMULTIPLY:
- return CLSID_D2D1Premultiply;
- case FilterType::UNPREMULTIPLY:
- return CLSID_D2D1UnPremultiply;
- default:
- break;
- }
- return GUID_NULL;
-}
-
-static bool IsTransferFilterType(FilterType aType) {
- switch (aType) {
- case FilterType::LINEAR_TRANSFER:
- case FilterType::GAMMA_TRANSFER:
- case FilterType::TABLE_TRANSFER:
- case FilterType::DISCRETE_TRANSFER:
- return true;
- default:
- return false;
- }
-}
-
-static bool IsDiffuseLightingFilterType(FilterType aType) {
- switch (aType) {
- case FilterType::POINT_DIFFUSE:
- case FilterType::SPOT_DIFFUSE:
- case FilterType::DISTANT_DIFFUSE:
- return true;
- default:
- return false;
- }
-}
-
-static bool IsSpecularLightingFilterType(FilterType aType) {
- switch (aType) {
- case FilterType::POINT_SPECULAR:
- case FilterType::SPOT_SPECULAR:
- case FilterType::DISTANT_SPECULAR:
- return true;
- default:
- return false;
- }
-}
-
-static bool IsLightingFilterType(FilterType aType) {
- return IsDiffuseLightingFilterType(aType) ||
- IsSpecularLightingFilterType(aType);
-}
-
-static bool HasUnboundedOutputRegion(FilterType aType) {
- if (IsTransferFilterType(aType) || IsLightingFilterType(aType)) {
- return true;
- }
-
- return aType == FilterType::COLOR_MATRIX;
-}
-
-/* static */
-already_AddRefed<FilterNode> FilterNodeD2D1::Create(ID2D1DeviceContext* aDC,
- FilterType aType) {
- if (aType == FilterType::CONVOLVE_MATRIX) {
- return MakeAndAddRef<FilterNodeConvolveD2D1>(aDC);
- } else if (IsLightingFilterType(aType)) {
- return MakeAndAddRef<FilterNodeLightingD2D1>(aDC, aType);
- }
-
- RefPtr<ID2D1Effect> effect;
- HRESULT hr;
-
- hr = aDC->CreateEffect(GetCLDIDForFilterType(aType), getter_AddRefs(effect));
-
- if (FAILED(hr) || !effect) {
- gfxCriticalErrorOnce() << "Failed to create effect for FilterType: "
- << hexa(hr);
- return nullptr;
- }
-
- if (aType == FilterType::ARITHMETIC_COMBINE) {
- effect->SetValue(D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT, TRUE);
- }
-
- if (aType == FilterType::OPACITY) {
- return MakeAndAddRef<FilterNodeOpacityD2D1>(effect, aType);
- }
-
- RefPtr<FilterNodeD2D1> filter = new FilterNodeD2D1(effect, aType);
-
- if (HasUnboundedOutputRegion(aType)) {
- // These filters can produce non-transparent output from transparent
- // input pixels, and we want them to have an unbounded output region.
- filter = new FilterNodeExtendInputAdapterD2D1(aDC, filter, aType);
- }
-
- if (IsTransferFilterType(aType)) {
- // Component transfer filters should appear to apply on unpremultiplied
- // colors, but the D2D1 effects apply on premultiplied colors.
- filter = new FilterNodePremultiplyAdapterD2D1(aDC, filter, aType);
- }
-
- return filter.forget();
-}
-
-void FilterNodeD2D1::InitUnmappedProperties() {
- switch (mType) {
- case FilterType::COLOR_MATRIX:
- mEffect->SetValue(D2D1_COLORMATRIX_PROP_CLAMP_OUTPUT, TRUE);
- break;
- case FilterType::TRANSFORM:
- mEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE,
- D2D1_BORDER_MODE_HARD);
- break;
- default:
- break;
- }
-}
-
-void FilterNodeD2D1::SetInput(uint32_t aIndex, SourceSurface* aSurface) {
- UINT32 input = GetD2D1InputForInput(mType, aIndex);
- ID2D1Effect* effect = InputEffect();
-
- if (mType == FilterType::COMPOSITE) {
- UINT32 inputCount = effect->GetInputCount();
-
- if (aIndex == inputCount - 1 && aSurface == nullptr) {
- effect->SetInputCount(inputCount - 1);
- } else if (aIndex >= inputCount && aSurface) {
- effect->SetInputCount(aIndex + 1);
- }
- }
-
- auto inputCount = effect->GetInputCount();
- MOZ_RELEASE_ASSERT(input < inputCount);
-
- mInputSurfaces.resize(inputCount);
- mInputFilters.resize(inputCount);
-
- // In order to convert aSurface into an ID2D1Image, we need to know what
- // DrawTarget we paint into. However, the same FilterNode object can be
- // used on different DrawTargets, so we need to hold on to the SourceSurface
- // objects and delay the conversion until we're actually painted and know
- // our target DrawTarget.
- // The conversion happens in WillDraw().
-
- mInputSurfaces[input] = aSurface;
- mInputFilters[input] = nullptr;
-
- // Clear the existing image from the effect.
- effect->SetInput(input, nullptr);
-}
-
-void FilterNodeD2D1::SetInput(uint32_t aIndex, FilterNode* aFilter) {
- UINT32 input = GetD2D1InputForInput(mType, aIndex);
- ID2D1Effect* effect = InputEffect();
-
- if (mType == FilterType::COMPOSITE) {
- UINT32 inputCount = effect->GetInputCount();
-
- if (aIndex == inputCount - 1 && aFilter == nullptr) {
- effect->SetInputCount(inputCount - 1);
- } else if (aIndex >= inputCount && aFilter) {
- effect->SetInputCount(aIndex + 1);
- }
- }
-
- auto inputCount = effect->GetInputCount();
- MOZ_RELEASE_ASSERT(input < inputCount);
-
- if (aFilter && aFilter->GetBackendType() != FILTER_BACKEND_DIRECT2D1_1) {
- gfxWarning() << "Unknown input FilterNode set on effect.";
- MOZ_ASSERT(0);
- return;
- }
-
- FilterNodeD2D1* filter = static_cast<FilterNodeD2D1*>(aFilter);
-
- mInputSurfaces.resize(inputCount);
- mInputFilters.resize(inputCount);
-
- // We hold on to the FilterNode object so that we can call WillDraw() on it.
- mInputSurfaces[input] = nullptr;
- mInputFilters[input] = filter;
-
- if (filter) {
- effect->SetInputEffect(input, filter->OutputEffect());
- }
-}
-
-void FilterNodeD2D1::WillDraw(DrawTarget* aDT) {
- // Convert input SourceSurfaces into ID2D1Images and set them on the effect.
- for (size_t inputIndex = 0; inputIndex < mInputSurfaces.size();
- inputIndex++) {
- if (mInputSurfaces[inputIndex]) {
- ID2D1Effect* effect = InputEffect();
- RefPtr<ID2D1Image> image =
- GetImageForSourceSurface(aDT, mInputSurfaces[inputIndex]);
- effect->SetInput(inputIndex, image);
- }
- }
-
- // Call WillDraw() on our input filters.
- for (std::vector<RefPtr<FilterNodeD2D1>>::iterator it = mInputFilters.begin();
- it != mInputFilters.end(); it++) {
- if (*it) {
- (*it)->WillDraw(aDT);
- }
- }
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, uint32_t aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- if (mType == FilterType::TURBULENCE &&
- aIndex == ATT_TURBULENCE_BASE_FREQUENCY) {
- mEffect->SetValue(input, D2D1::Vector2F(FLOAT(aValue), FLOAT(aValue)));
- return;
- } else if (mType == FilterType::DIRECTIONAL_BLUR &&
- aIndex == ATT_DIRECTIONAL_BLUR_DIRECTION) {
- mEffect->SetValue(input, aValue == BLUR_DIRECTION_X ? 0 : 90.0f);
- return;
- }
-
- mEffect->SetValue(input, ConvertValue(mType, aIndex, aValue));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, Float aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, aValue);
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const Point& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2DPoint(aValue));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const Matrix5x4& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2DMatrix5x4(aValue));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const Point3D& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2DVector3D(aValue));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const Size& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2D1::Vector2F(aValue.width, aValue.height));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const IntSize& aValue) {
- UINT32 widthProp, heightProp;
-
- if (!GetD2D1PropsForIntSize(mType, aIndex, &widthProp, &heightProp)) {
- return;
- }
-
- IntSize value = aValue;
- ConvertValue(mType, aIndex, value);
-
- mEffect->SetValue(widthProp, (UINT)value.width);
- mEffect->SetValue(heightProp, (UINT)value.height);
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const DeviceColor& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input,
- D2D1::Vector4F(aValue.r * aValue.a, aValue.g * aValue.a,
- aValue.b * aValue.a, aValue.a));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const Rect& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2DRect(aValue));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const IntRect& aValue) {
- if (mType == FilterType::TURBULENCE) {
- MOZ_ASSERT(aIndex == ATT_TURBULENCE_RECT);
-
- mEffect->SetValue(D2D1_TURBULENCE_PROP_OFFSET,
- D2D1::Vector2F(Float(aValue.X()), Float(aValue.Y())));
- mEffect->SetValue(
- D2D1_TURBULENCE_PROP_SIZE,
- D2D1::Vector2F(Float(aValue.Width()), Float(aValue.Height())));
- return;
- }
-
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input,
- D2D1::RectF(Float(aValue.X()), Float(aValue.Y()),
- Float(aValue.XMost()), Float(aValue.YMost())));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, bool aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, (BOOL)aValue);
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const Float* aValues,
- uint32_t aSize) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, (BYTE*)aValues, sizeof(Float) * aSize);
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const IntPoint& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2DPoint(aValue));
-}
-
-void FilterNodeD2D1::SetAttribute(uint32_t aIndex, const Matrix& aMatrix) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2DMatrix(aMatrix));
-}
-
-void FilterNodeOpacityD2D1::SetAttribute(uint32_t aIndex, Float aValue) {
- D2D1_MATRIX_5X4_F matrix =
- D2D1::Matrix5x4F(aValue, 0, 0, 0, 0, aValue, 0, 0, 0, 0, aValue, 0, 0, 0,
- 0, aValue, 0, 0, 0, 0);
-
- mEffect->SetValue(D2D1_COLORMATRIX_PROP_COLOR_MATRIX, matrix);
- mEffect->SetValue(D2D1_COLORMATRIX_PROP_ALPHA_MODE,
- D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT);
-}
-
-FilterNodeRenderRectD2D1::FilterNodeRenderRectD2D1(ID2D1DeviceContext* aDC,
- FilterType aType)
- : FilterNodeD2D1(nullptr, aType) {
- HRESULT hr;
-
- hr = aDC->CreateEffect(GetCLDIDForFilterType(aType), getter_AddRefs(mEffect));
-
- if (FAILED(hr) || !mEffect) {
- gfxWarning() << "Failed to create FilterNodeRenderRectD2D1 filter! "
- << static_cast<int>(aType);
- return;
- }
-
- hr = aDC->CreateEffect(CLSID_ExtendInputEffect,
- getter_AddRefs(mExtendInputEffect));
-
- if (FAILED(hr) || !mExtendInputEffect) {
- gfxWarning() << "Failed to create FilterNodeRenderRectD2D1 "
- << "ExtendInput filter!";
- return;
- }
-
- hr = aDC->CreateEffect(CLSID_D2D1Border, getter_AddRefs(mBorderEffect));
-
- if (FAILED(hr) || !mBorderEffect) {
- gfxWarning() << "Failed to create FilterNodeRenderRectD2D1 "
- << "BorderEffect filter!";
- return;
- }
-
- mBorderEffect->SetInputEffect(0, mExtendInputEffect.get());
-}
-
-void FilterNodeRenderRectD2D1::SetInput(uint32_t aIndex, FilterNode* aFilter) {
- FilterNodeD2D1::SetInput(aIndex, aFilter);
-
- UpdateChain();
-}
-
-void FilterNodeRenderRectD2D1::UpdateRenderRect() {
- mExtendInputEffect->SetValue(
- EXTENDINPUT_PROP_OUTPUT_RECT,
- D2D1::Vector4F(Float(mRenderRect.x), Float(mRenderRect.y),
- Float(mRenderRect.XMost()), Float(mRenderRect.YMost())));
-}
-
-void FilterNodeConvolveD2D1::UpdateOffset() {
- D2D1_VECTOR_2F vector = D2D1::Vector2F(
- (Float(mKernelSize.width) - 1.0f) / 2.0f - Float(mTarget.x),
- (Float(mKernelSize.height) - 1.0f) / 2.0f - Float(mTarget.y));
-
- mEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET, vector);
-}
-
-FilterNodeLightingD2D1::FilterNodeLightingD2D1(ID2D1DeviceContext* aDC,
- FilterType aType)
- : FilterNodeRenderRectD2D1(aDC, aType) {
- // The shape of the filter graph:
- //
- // input --> extendinput --> border --> mEffect = Lighting
-
- mEffect->SetInputEffect(0, mBorderEffect.get());
-
- mBorderEffect->SetValue(D2D1_BORDER_PROP_EDGE_MODE_X,
- D2D1_BORDER_EDGE_MODE_CLAMP);
- mBorderEffect->SetValue(D2D1_BORDER_PROP_EDGE_MODE_Y,
- D2D1_BORDER_EDGE_MODE_CLAMP);
-
- UpdateChain();
- UpdateRenderRect();
-}
-
-ID2D1Effect* FilterNodeLightingD2D1::InputEffect() {
- return mExtendInputEffect.get();
-}
-
-void FilterNodeLightingD2D1::UpdateChain() {
- RefPtr<ID2D1Effect> inputEffect;
- if (mInputFilters.size() > 0 && mInputFilters[0]) {
- inputEffect = mInputFilters[0]->OutputEffect();
- }
-
- mExtendInputEffect->SetInputEffect(0, inputEffect);
-}
-
-void FilterNodeLightingD2D1::SetAttribute(uint32_t aIndex, Float aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- // Ranges taken from
- // https://learn.microsoft.com/en-us/windows/win32/direct2d/diffuse-lighting
- // https://learn.microsoft.com/en-us/windows/win32/direct2d/specular-lighting
-
- if ((mType == FilterType::DISTANT_DIFFUSE &&
- (aIndex == ATT_DISTANT_DIFFUSE_AZIMUTH ||
- aIndex == ATT_DISTANT_DIFFUSE_ELEVATION)) ||
- (mType == FilterType::DISTANT_SPECULAR &&
- (aIndex == ATT_DISTANT_SPECULAR_AZIMUTH ||
- aIndex == ATT_DISTANT_SPECULAR_ELEVATION))) {
- // D2D requires an angle between 0 and 360.
- if (aValue < 0) {
- aValue = std::fmod(aValue, 360.f) + 360.f;
- } else if (aValue > 360.f) {
- aValue = std::fmod(aValue, 360.f);
- }
- }
-
- if ((mType == FilterType::SPOT_DIFFUSE &&
- aIndex == ATT_SPOT_DIFFUSE_LIMITING_CONE_ANGLE) ||
- (mType == FilterType::SPOT_SPECULAR &&
- aIndex == ATT_SPOT_SPECULAR_LIMITING_CONE_ANGLE)) {
- // On input limitingConeAngle is between -90 and 90, and in practice D2D
- // deals with that as desired, but the D2D documentation says the angle
- // must be between 0 and 90, so since it doesn't change behavior
- // we just conform give D2D an angle between 0 and 90.
- if (aValue < 0.f) {
- aValue = -aValue;
- }
- }
-
- if ((mType == FilterType::SPOT_DIFFUSE && aIndex == ATT_SPOT_DIFFUSE_FOCUS) ||
- (mType == FilterType::SPOT_SPECULAR &&
- aIndex == ATT_SPOT_SPECULAR_FOCUS)) {
- aValue = std::clamp(aValue, 0.0f, 200.0f);
- }
-
- if (IsDiffuseLightingFilterType(mType) &&
- aIndex == ATT_DIFFUSE_LIGHTING_DIFFUSE_CONSTANT) {
- aValue = std::clamp(aValue, 0.0f, 10000.0f);
- }
-
- if (IsSpecularLightingFilterType(mType)) {
- if (aIndex == ATT_SPECULAR_LIGHTING_SPECULAR_CONSTANT) {
- aValue = std::clamp(aValue, 0.0f, 10000.0f);
- }
- if (aIndex == ATT_SPECULAR_LIGHTING_SPECULAR_EXPONENT) {
- // In practice this is the SVG valid range anyway so we'd
- // never be called with values outside this range.
- aValue = std::clamp(aValue, 1.0f, 128.0f);
- }
- }
-
- if (aIndex == ATT_LIGHTING_SURFACE_SCALE) {
- aValue = std::clamp(aValue, 0.0f, 10000.0f);
- }
-
- mEffect->SetValue(input, aValue);
-}
-
-void FilterNodeLightingD2D1::SetAttribute(uint32_t aIndex,
- const IntRect& aValue) {
- if (aIndex != ATT_LIGHTING_RENDER_RECT) {
- MOZ_ASSERT(false);
- return;
- }
-
- mRenderRect = aValue;
-
- UpdateRenderRect();
-}
-
-void FilterNodeLightingD2D1::SetAttribute(uint32_t aIndex,
- const DeviceColor& aValue) {
- UINT32 input = GetD2D1PropForAttribute(mType, aIndex);
- MOZ_ASSERT(input < mEffect->GetPropertyCount());
-
- mEffect->SetValue(input, D2D1::Vector3F(aValue.r, aValue.g, aValue.b));
-}
-
-FilterNodeConvolveD2D1::FilterNodeConvolveD2D1(ID2D1DeviceContext* aDC)
- : FilterNodeRenderRectD2D1(nullptr, FilterType::CONVOLVE_MATRIX),
- mEdgeMode(EDGE_MODE_DUPLICATE) {
- mEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE,
- D2D1_BORDER_MODE_SOFT);
-
- UpdateChain();
- UpdateRenderRect();
-}
-
-void FilterNodeConvolveD2D1::SetAttribute(uint32_t aIndex, uint32_t aValue) {
- if (aIndex != ATT_CONVOLVE_MATRIX_EDGE_MODE) {
- return FilterNodeD2D1::SetAttribute(aIndex, aValue);
- }
-
- mEdgeMode = (ConvolveMatrixEdgeMode)aValue;
-
- UpdateChain();
-}
-
-ID2D1Effect* FilterNodeConvolveD2D1::InputEffect() {
- return mEdgeMode == EDGE_MODE_NONE ? mEffect.get() : mExtendInputEffect.get();
-}
-
-void FilterNodeConvolveD2D1::UpdateChain() {
- // The shape of the filter graph:
- //
- // EDGE_MODE_NONE:
- // input --> convolvematrix
- //
- // EDGE_MODE_DUPLICATE or EDGE_MODE_WRAP:
- // input --> extendinput --> border --> convolvematrix
- //
- // mEffect is convolvematrix.
-
- if (mEdgeMode != EDGE_MODE_NONE) {
- mEffect->SetInputEffect(0, mBorderEffect.get());
- }
-
- RefPtr<ID2D1Effect> inputEffect;
- if (mInputFilters.size() > 0 && mInputFilters[0]) {
- inputEffect = mInputFilters[0]->OutputEffect();
- }
- InputEffect()->SetInputEffect(0, inputEffect);
-
- if (mEdgeMode == EDGE_MODE_DUPLICATE) {
- mBorderEffect->SetValue(D2D1_BORDER_PROP_EDGE_MODE_X,
- D2D1_BORDER_EDGE_MODE_CLAMP);
- mBorderEffect->SetValue(D2D1_BORDER_PROP_EDGE_MODE_Y,
- D2D1_BORDER_EDGE_MODE_CLAMP);
- } else if (mEdgeMode == EDGE_MODE_WRAP) {
- mBorderEffect->SetValue(D2D1_BORDER_PROP_EDGE_MODE_X,
- D2D1_BORDER_EDGE_MODE_WRAP);
- mBorderEffect->SetValue(D2D1_BORDER_PROP_EDGE_MODE_Y,
- D2D1_BORDER_EDGE_MODE_WRAP);
- }
-}
-
-void FilterNodeConvolveD2D1::SetAttribute(uint32_t aIndex,
- const IntSize& aValue) {
- if (aIndex != ATT_CONVOLVE_MATRIX_KERNEL_SIZE) {
- MOZ_ASSERT(false);
- return;
- }
-
- mKernelSize = aValue;
-
- mEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X, aValue.width);
- mEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y, aValue.height);
-
- UpdateOffset();
-}
-
-void FilterNodeConvolveD2D1::SetAttribute(uint32_t aIndex,
- const IntPoint& aValue) {
- if (aIndex != ATT_CONVOLVE_MATRIX_TARGET) {
- MOZ_ASSERT(false);
- return;
- }
-
- mTarget = aValue;
-
- UpdateOffset();
-}
-
-void FilterNodeConvolveD2D1::SetAttribute(uint32_t aIndex,
- const IntRect& aValue) {
- if (aIndex != ATT_CONVOLVE_MATRIX_RENDER_RECT) {
- MOZ_ASSERT(false);
- return;
- }
-
- mRenderRect = aValue;
-
- UpdateRenderRect();
-}
-
-FilterNodeExtendInputAdapterD2D1::FilterNodeExtendInputAdapterD2D1(
- ID2D1DeviceContext* aDC, FilterNodeD2D1* aFilterNode, FilterType aType)
- : FilterNodeD2D1(aFilterNode->MainEffect(), aType),
- mWrappedFilterNode(aFilterNode) {
- // We have an mEffect that looks at the bounds of the input effect, and we
- // want mEffect to regard its input as unbounded. So we take the input,
- // pipe it through an ExtendInput effect (which has an infinite output rect
- // by default), and feed the resulting unbounded composition into mEffect.
-
- HRESULT hr;
-
- hr = aDC->CreateEffect(CLSID_ExtendInputEffect,
- getter_AddRefs(mExtendInputEffect));
-
- if (FAILED(hr) || !mExtendInputEffect) {
- gfxWarning() << "Failed to create extend input effect for filter: "
- << hexa(hr);
- return;
- }
-
- aFilterNode->InputEffect()->SetInputEffect(0, mExtendInputEffect.get());
-}
-
-FilterNodePremultiplyAdapterD2D1::FilterNodePremultiplyAdapterD2D1(
- ID2D1DeviceContext* aDC, FilterNodeD2D1* aFilterNode, FilterType aType)
- : FilterNodeD2D1(aFilterNode->MainEffect(), aType) {
- // D2D1 component transfer effects do strange things when it comes to
- // premultiplication.
- // For our purposes we only need the transfer filters to apply straight to
- // unpremultiplied source channels and output unpremultiplied results.
- // However, the D2D1 effects are designed differently: They can apply to both
- // premultiplied and unpremultiplied inputs, and they always premultiply
- // their result - at least in those color channels that have not been
- // disabled.
- // In order to determine whether the input needs to be unpremultiplied as
- // part of the transfer, the effect consults the alpha mode metadata of the
- // input surface or the input effect. We don't have such a concept in Moz2D,
- // and giving Moz2D users different results based on something that cannot be
- // influenced through Moz2D APIs seems like a bad idea.
- // We solve this by applying a premultiply effect to the input before feeding
- // it into the transfer effect. The premultiply effect always premultiplies
- // regardless of any alpha mode metadata on inputs, and it always marks its
- // output as premultiplied so that the transfer effect will unpremultiply
- // consistently. Feeding always-premultiplied input into the transfer effect
- // also avoids another problem that would appear when individual color
- // channels disable the transfer: In that case, the disabled channels would
- // pass through unchanged in their unpremultiplied form and the other
- // channels would be premultiplied, giving a mixed result.
- // But since we now ensure that the input is premultiplied, disabled channels
- // will pass premultiplied values through to the result, which is consistent
- // with the enabled channels.
- // We also add an unpremultiply effect that postprocesses the result of the
- // transfer effect because getting unpremultiplied results from the transfer
- // filters is part of the FilterNode API.
- HRESULT hr;
-
- hr = aDC->CreateEffect(CLSID_D2D1Premultiply,
- getter_AddRefs(mPrePremultiplyEffect));
-
- if (FAILED(hr) || !mPrePremultiplyEffect) {
- gfxWarning() << "Failed to create ComponentTransfer filter!";
- return;
- }
-
- hr = aDC->CreateEffect(CLSID_D2D1UnPremultiply,
- getter_AddRefs(mPostUnpremultiplyEffect));
-
- if (FAILED(hr) || !mPostUnpremultiplyEffect) {
- gfxWarning() << "Failed to create ComponentTransfer filter!";
- return;
- }
-
- aFilterNode->InputEffect()->SetInputEffect(0, mPrePremultiplyEffect.get());
- mPostUnpremultiplyEffect->SetInputEffect(0, aFilterNode->OutputEffect());
-}
-
-} // namespace gfx
-} // namespace mozilla
diff --git a/gfx/2d/FilterNodeD2D1.h b/gfx/2d/FilterNodeD2D1.h
@@ -1,193 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_FILTERNODED2D1_H_
-#define MOZILLA_GFX_FILTERNODED2D1_H_
-
-#include "2D.h"
-#include "Filters.h"
-#include <vector>
-#include <windows.h>
-#include <d2d1_1.h>
-#include <cguid.h>
-
-namespace mozilla {
-namespace gfx {
-
-class FilterNodeD2D1 : public FilterNode {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeD2D1, override)
-
- static already_AddRefed<FilterNode> Create(ID2D1DeviceContext* aDC,
- FilterType aType);
-
- FilterNodeD2D1(ID2D1Effect* aEffect, FilterType aType)
- : mEffect(aEffect), mType(aType) {
- InitUnmappedProperties();
- }
-
- virtual FilterBackend GetBackendType() { return FILTER_BACKEND_DIRECT2D1_1; }
-
- virtual void SetInput(uint32_t aIndex, SourceSurface* aSurface);
- virtual void SetInput(uint32_t aIndex, FilterNode* aFilter);
-
- virtual void SetAttribute(uint32_t aIndex, uint32_t aValue);
- virtual void SetAttribute(uint32_t aIndex, Float aValue);
- virtual void SetAttribute(uint32_t aIndex, const Point& aValue);
- virtual void SetAttribute(uint32_t aIndex, const Matrix5x4& aValue);
- virtual void SetAttribute(uint32_t aIndex, const Point3D& aValue);
- virtual void SetAttribute(uint32_t aIndex, const Size& aValue);
- virtual void SetAttribute(uint32_t aIndex, const IntSize& aValue);
- virtual void SetAttribute(uint32_t aIndex, const DeviceColor& aValue);
- virtual void SetAttribute(uint32_t aIndex, const Rect& aValue);
- virtual void SetAttribute(uint32_t aIndex, const IntRect& aValue);
- virtual void SetAttribute(uint32_t aIndex, bool aValue);
- virtual void SetAttribute(uint32_t aIndex, const Float* aValues,
- uint32_t aSize);
- virtual void SetAttribute(uint32_t aIndex, const IntPoint& aValue);
- virtual void SetAttribute(uint32_t aIndex, const Matrix& aValue);
-
- // Called by DrawTarget before it draws our OutputEffect, and recursively
- // by the filter nodes that have this filter as one of their inputs. This
- // gives us a chance to convert any input surfaces to the target format for
- // the DrawTarget that we will draw to.
- virtual void WillDraw(DrawTarget* aDT);
-
- virtual ID2D1Effect* MainEffect() { return mEffect.get(); }
- virtual ID2D1Effect* InputEffect() { return mEffect.get(); }
- virtual ID2D1Effect* OutputEffect() { return mEffect.get(); }
-
- protected:
- friend class DrawTargetD2D1;
- friend class DrawTargetD2D;
-
- void InitUnmappedProperties();
-
- RefPtr<ID2D1Effect> mEffect;
- std::vector<RefPtr<FilterNodeD2D1>> mInputFilters;
- std::vector<RefPtr<SourceSurface>> mInputSurfaces;
- FilterType mType;
-
- private:
- using FilterNode::SetAttribute;
- using FilterNode::SetInput;
-};
-
-// Both ConvolveMatrix and Lighting filters have an interaction of edge mode and
-// source rect that is a bit tricky with D2D1 effects. We want the edge mode to
-// only apply outside of the render rect. So if our input surface or filter is
-// smaller than the render rect, we need to add transparency around it until we
-// reach the edges of the render rect, and only then do any repeating or edge
-// duplicating. Unfortunately, the border effect does not have a render rect
-// attribute - it only looks at the output rect of its input filter or
-// surface. So we use our custom ExtendInput effect to adjust the output rect of
-// our input. All of this is only necessary when our edge mode is not
-// EDGE_MODE_NONE, so we update the filter chain dynamically in UpdateChain().
-
-class FilterNodeRenderRectD2D1 : public FilterNodeD2D1 {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeRenderRectD2D1, override)
- FilterNodeRenderRectD2D1(ID2D1DeviceContext* aDC, FilterType aType);
-
- void SetInput(uint32_t aIndex, FilterNode* aFilter) override;
-
- protected:
- virtual void UpdateChain() = 0;
- void UpdateRenderRect();
-
- RefPtr<ID2D1Effect> mExtendInputEffect;
- RefPtr<ID2D1Effect> mBorderEffect;
- IntRect mRenderRect;
-};
-
-class FilterNodeLightingD2D1 : public FilterNodeRenderRectD2D1 {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeLightingD2D1, override)
- FilterNodeLightingD2D1(ID2D1DeviceContext* aDC, FilterType aType);
-
- void SetAttribute(uint32_t aIndex, const Float aValue) override;
- void SetAttribute(uint32_t aIndex, const IntRect& aValue) override;
- void SetAttribute(uint32_t aIndex, const DeviceColor& aValue) override;
-
- ID2D1Effect* InputEffect() override;
-
- private:
- void UpdateChain() override;
-};
-
-class FilterNodeConvolveD2D1 : public FilterNodeRenderRectD2D1 {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeConvolveD2D1, override)
- explicit FilterNodeConvolveD2D1(ID2D1DeviceContext* aDC);
-
- void SetAttribute(uint32_t aIndex, uint32_t aValue) override;
- void SetAttribute(uint32_t aIndex, const IntSize& aValue) override;
- void SetAttribute(uint32_t aIndex, const IntPoint& aValue) override;
- void SetAttribute(uint32_t aIndex, const IntRect& aValue) override;
-
- ID2D1Effect* InputEffect() override;
-
- private:
- using FilterNode::SetAttribute;
- using FilterNode::SetInput;
-
- void UpdateChain() override;
- void UpdateOffset();
-
- ConvolveMatrixEdgeMode mEdgeMode;
- IntPoint mTarget;
- IntSize mKernelSize;
-};
-
-class FilterNodeOpacityD2D1 : public FilterNodeD2D1 {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeOpacityD2D1, override)
- FilterNodeOpacityD2D1(ID2D1Effect* aEffect, FilterType aType)
- : FilterNodeD2D1(aEffect, aType) {}
-
- void SetAttribute(uint32_t aIndex, Float aValue) override;
-};
-
-class FilterNodeExtendInputAdapterD2D1 : public FilterNodeD2D1 {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodeExtendInputAdapterD2D1,
- override)
- FilterNodeExtendInputAdapterD2D1(ID2D1DeviceContext* aDC,
- FilterNodeD2D1* aFilterNode,
- FilterType aType);
-
- ID2D1Effect* InputEffect() override { return mExtendInputEffect.get(); }
- ID2D1Effect* OutputEffect() override {
- return mWrappedFilterNode->OutputEffect();
- }
-
- private:
- RefPtr<FilterNodeD2D1> mWrappedFilterNode;
- RefPtr<ID2D1Effect> mExtendInputEffect;
-};
-
-class FilterNodePremultiplyAdapterD2D1 : public FilterNodeD2D1 {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNodePremultiplyAdapterD2D1,
- override)
- FilterNodePremultiplyAdapterD2D1(ID2D1DeviceContext* aDC,
- FilterNodeD2D1* aFilterNode,
- FilterType aType);
-
- ID2D1Effect* InputEffect() override { return mPrePremultiplyEffect.get(); }
- ID2D1Effect* OutputEffect() override {
- return mPostUnpremultiplyEffect.get();
- }
-
- private:
- RefPtr<ID2D1Effect> mPrePremultiplyEffect;
- RefPtr<ID2D1Effect> mPostUnpremultiplyEffect;
-};
-
-} // namespace gfx
-} // namespace mozilla
-
-#endif
diff --git a/gfx/2d/Filters.h b/gfx/2d/Filters.h
@@ -22,7 +22,6 @@ class SourceSurface;
enum FilterBackend {
FILTER_BACKEND_SOFTWARE = 0,
- FILTER_BACKEND_DIRECT2D1_1,
FILTER_BACKEND_WEBGL,
FILTER_BACKEND_RECORDING,
FILTER_BACKEND_CAPTURE
diff --git a/gfx/2d/GradientStopsD2D.h b/gfx/2d/GradientStopsD2D.h
@@ -1,42 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_GRADIENTSTOPSD2D_H_
-#define MOZILLA_GFX_GRADIENTSTOPSD2D_H_
-
-#include "2D.h"
-
-#include <d2d1.h>
-
-namespace mozilla {
-namespace gfx {
-
-class GradientStopsD2D : public GradientStops {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(GradientStopsD2D, override)
-
- GradientStopsD2D(ID2D1GradientStopCollection* aStopCollection,
- ID3D11Device* aDevice)
- : mStopCollection(aStopCollection), mDevice(aDevice) {}
-
- virtual BackendType GetBackendType() const { return BackendType::DIRECT2D; }
-
- bool IsValid() const final {
- return mDevice == Factory::GetDirect3D11Device();
- }
-
- private:
- friend class DrawTargetD2D;
- friend class DrawTargetD2D1;
-
- mutable RefPtr<ID2D1GradientStopCollection> mStopCollection;
- RefPtr<ID3D11Device> mDevice;
-};
-
-} // namespace gfx
-} // namespace mozilla
-
-#endif /* MOZILLA_GFX_GRADIENTSTOPSD2D_H_ */
diff --git a/gfx/2d/HelpersD2D.h b/gfx/2d/HelpersD2D.h
@@ -1,980 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_HELPERSD2D_H_
-#define MOZILLA_GFX_HELPERSD2D_H_
-
-#include <d2d1_1.h>
-
-#include <vector>
-
-#include <dwrite.h>
-#include <float.h>
-#include "2D.h"
-#include "Logging.h"
-#include "ImageScaling.h"
-
-#include "ScaledFontDWrite.h"
-
-#undef min
-#undef max
-
-namespace mozilla {
-namespace gfx {
-
-RefPtr<ID2D1Factory1> D2DFactory();
-
-template <typename T>
-static inline D2D1_POINT_2F D2DPoint(const T& aPoint) {
- return D2D1::Point2F(aPoint.x, aPoint.y);
-}
-
-static inline D2D1_SIZE_U D2DIntSize(const IntSize& aSize) {
- return D2D1::SizeU(aSize.width, aSize.height);
-}
-
-template <typename T>
-static inline D2D1_RECT_F D2DRect(const T& aRect) {
- return D2D1::RectF(aRect.X(), aRect.Y(), aRect.XMost(), aRect.YMost());
-}
-
-static inline D2D1_ROUNDED_RECT D2DRoundedRect(const RoundedRect& aRect) {
- return D2D1::RoundedRect(D2DRect(aRect.rect),
- aRect.corners.BottomLeft().width,
- aRect.corners.BottomLeft().height);
-}
-
-static inline D2D1_EXTEND_MODE D2DExtend(ExtendMode aExtendMode, Axis aAxis) {
- D2D1_EXTEND_MODE extend;
- switch (aExtendMode) {
- case ExtendMode::REPEAT:
- extend = D2D1_EXTEND_MODE_WRAP;
- break;
- case ExtendMode::REPEAT_X: {
- extend = aAxis == Axis::X_AXIS ? D2D1_EXTEND_MODE_WRAP
- : D2D1_EXTEND_MODE_CLAMP;
- break;
- }
- case ExtendMode::REPEAT_Y: {
- extend = aAxis == Axis::Y_AXIS ? D2D1_EXTEND_MODE_WRAP
- : D2D1_EXTEND_MODE_CLAMP;
- break;
- }
- case ExtendMode::REFLECT:
- extend = D2D1_EXTEND_MODE_MIRROR;
- break;
- default:
- extend = D2D1_EXTEND_MODE_CLAMP;
- }
-
- return extend;
-}
-
-static inline D2D1_BITMAP_INTERPOLATION_MODE D2DFilter(
- const SamplingFilter aSamplingFilter) {
- switch (aSamplingFilter) {
- case SamplingFilter::POINT:
- return D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR;
- default:
- return D2D1_BITMAP_INTERPOLATION_MODE_LINEAR;
- }
-}
-
-static inline D2D1_INTERPOLATION_MODE D2DInterpolationMode(
- const SamplingFilter aSamplingFilter) {
- switch (aSamplingFilter) {
- case SamplingFilter::POINT:
- return D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR;
- default:
- return D2D1_INTERPOLATION_MODE_LINEAR;
- }
-}
-
-static inline D2D1_MATRIX_5X4_F D2DMatrix5x4(const Matrix5x4& aMatrix) {
- return D2D1::Matrix5x4F(aMatrix._11, aMatrix._12, aMatrix._13, aMatrix._14,
- aMatrix._21, aMatrix._22, aMatrix._23, aMatrix._24,
- aMatrix._31, aMatrix._32, aMatrix._33, aMatrix._34,
- aMatrix._41, aMatrix._42, aMatrix._43, aMatrix._44,
- aMatrix._51, aMatrix._52, aMatrix._53, aMatrix._54);
-}
-
-static inline D2D1_VECTOR_3F D2DVector3D(const Point3D& aPoint) {
- return D2D1::Vector3F(aPoint.x, aPoint.y, aPoint.z);
-}
-
-static inline D2D1_ANTIALIAS_MODE D2DAAMode(AntialiasMode aMode) {
- switch (aMode) {
- case AntialiasMode::NONE:
- return D2D1_ANTIALIAS_MODE_ALIASED;
- default:
- return D2D1_ANTIALIAS_MODE_PER_PRIMITIVE;
- }
-}
-
-static inline D2D1_MATRIX_3X2_F D2DMatrix(const Matrix& aTransform) {
- return D2D1::Matrix3x2F(aTransform._11, aTransform._12, aTransform._21,
- aTransform._22, aTransform._31, aTransform._32);
-}
-
-static inline D2D1_COLOR_F D2DColor(const DeviceColor& aColor) {
- return D2D1::ColorF(aColor.r, aColor.g, aColor.b, aColor.a);
-}
-
-static inline IntSize ToIntSize(const D2D1_SIZE_U& aSize) {
- return IntSize(aSize.width, aSize.height);
-}
-
-static inline SurfaceFormat ToPixelFormat(const DXGI_FORMAT& aFormat) {
- switch (aFormat) {
- case DXGI_FORMAT_A8_UNORM:
- case DXGI_FORMAT_R8_UNORM:
- return SurfaceFormat::A8;
- default:
- return SurfaceFormat::B8G8R8A8;
- }
-}
-
-static inline SurfaceFormat ToPixelFormat(const D2D1_PIXEL_FORMAT& aFormat) {
- switch (aFormat.format) {
- case DXGI_FORMAT_A8_UNORM:
- case DXGI_FORMAT_R8_UNORM:
- return SurfaceFormat::A8;
- case DXGI_FORMAT_B8G8R8A8_UNORM:
- if (aFormat.alphaMode == D2D1_ALPHA_MODE_IGNORE) {
- return SurfaceFormat::B8G8R8X8;
- } else {
- return SurfaceFormat::B8G8R8A8;
- }
- default:
- return SurfaceFormat::B8G8R8A8;
- }
-}
-
-static inline Rect ToRect(const D2D1_RECT_F& aRect) {
- return Rect(aRect.left, aRect.top, aRect.right - aRect.left,
- aRect.bottom - aRect.top);
-}
-
-static inline Matrix ToMatrix(const D2D1_MATRIX_3X2_F& aTransform) {
- return Matrix(aTransform._11, aTransform._12, aTransform._21, aTransform._22,
- aTransform._31, aTransform._32);
-}
-
-static inline Point ToPoint(const D2D1_POINT_2F& aPoint) {
- return Point(aPoint.x, aPoint.y);
-}
-
-static inline DXGI_FORMAT DXGIFormat(SurfaceFormat aFormat) {
- switch (aFormat) {
- case SurfaceFormat::B8G8R8A8:
- return DXGI_FORMAT_B8G8R8A8_UNORM;
- case SurfaceFormat::B8G8R8X8:
- return DXGI_FORMAT_B8G8R8A8_UNORM;
- case SurfaceFormat::A8:
- return DXGI_FORMAT_A8_UNORM;
- default:
- return DXGI_FORMAT_UNKNOWN;
- }
-}
-
-static inline D2D1_ALPHA_MODE D2DAlphaModeForFormat(SurfaceFormat aFormat) {
- switch (aFormat) {
- case SurfaceFormat::B8G8R8X8:
- return D2D1_ALPHA_MODE_IGNORE;
- default:
- return D2D1_ALPHA_MODE_PREMULTIPLIED;
- }
-}
-
-static inline D2D1_PIXEL_FORMAT D2DPixelFormat(SurfaceFormat aFormat) {
- return D2D1::PixelFormat(DXGIFormat(aFormat), D2DAlphaModeForFormat(aFormat));
-}
-
-static inline bool D2DSupportsCompositeMode(CompositionOp aOp) {
- switch (aOp) {
- case CompositionOp::OP_OVER:
- case CompositionOp::OP_ADD:
- case CompositionOp::OP_ATOP:
- case CompositionOp::OP_OUT:
- case CompositionOp::OP_IN:
- case CompositionOp::OP_SOURCE:
- case CompositionOp::OP_DEST_IN:
- case CompositionOp::OP_DEST_OUT:
- case CompositionOp::OP_DEST_OVER:
- case CompositionOp::OP_DEST_ATOP:
- case CompositionOp::OP_XOR:
- case CompositionOp::OP_CLEAR:
- return true;
- default:
- return false;
- }
-}
-
-static inline D2D1_COMPOSITE_MODE D2DCompositionMode(CompositionOp aOp) {
- switch (aOp) {
- case CompositionOp::OP_OVER:
- return D2D1_COMPOSITE_MODE_SOURCE_OVER;
- case CompositionOp::OP_ADD:
- return D2D1_COMPOSITE_MODE_PLUS;
- case CompositionOp::OP_ATOP:
- return D2D1_COMPOSITE_MODE_SOURCE_ATOP;
- case CompositionOp::OP_OUT:
- return D2D1_COMPOSITE_MODE_SOURCE_OUT;
- case CompositionOp::OP_IN:
- return D2D1_COMPOSITE_MODE_SOURCE_IN;
- case CompositionOp::OP_SOURCE:
- return D2D1_COMPOSITE_MODE_SOURCE_COPY;
- case CompositionOp::OP_DEST_IN:
- return D2D1_COMPOSITE_MODE_DESTINATION_IN;
- case CompositionOp::OP_DEST_OUT:
- return D2D1_COMPOSITE_MODE_DESTINATION_OUT;
- case CompositionOp::OP_DEST_OVER:
- return D2D1_COMPOSITE_MODE_DESTINATION_OVER;
- case CompositionOp::OP_DEST_ATOP:
- return D2D1_COMPOSITE_MODE_DESTINATION_ATOP;
- case CompositionOp::OP_XOR:
- return D2D1_COMPOSITE_MODE_XOR;
- case CompositionOp::OP_CLEAR:
- return D2D1_COMPOSITE_MODE_DESTINATION_OUT;
- default:
- return D2D1_COMPOSITE_MODE_SOURCE_OVER;
- }
-}
-
-static inline D2D1_BLEND_MODE D2DBlendMode(CompositionOp aOp) {
- switch (aOp) {
- case CompositionOp::OP_MULTIPLY:
- return D2D1_BLEND_MODE_MULTIPLY;
- case CompositionOp::OP_SCREEN:
- return D2D1_BLEND_MODE_SCREEN;
- case CompositionOp::OP_OVERLAY:
- return D2D1_BLEND_MODE_OVERLAY;
- case CompositionOp::OP_DARKEN:
- return D2D1_BLEND_MODE_DARKEN;
- case CompositionOp::OP_LIGHTEN:
- return D2D1_BLEND_MODE_LIGHTEN;
- case CompositionOp::OP_COLOR_DODGE:
- return D2D1_BLEND_MODE_COLOR_DODGE;
- case CompositionOp::OP_COLOR_BURN:
- return D2D1_BLEND_MODE_COLOR_BURN;
- case CompositionOp::OP_HARD_LIGHT:
- return D2D1_BLEND_MODE_HARD_LIGHT;
- case CompositionOp::OP_SOFT_LIGHT:
- return D2D1_BLEND_MODE_SOFT_LIGHT;
- case CompositionOp::OP_DIFFERENCE:
- return D2D1_BLEND_MODE_DIFFERENCE;
- case CompositionOp::OP_EXCLUSION:
- return D2D1_BLEND_MODE_EXCLUSION;
- case CompositionOp::OP_HUE:
- return D2D1_BLEND_MODE_HUE;
- case CompositionOp::OP_SATURATION:
- return D2D1_BLEND_MODE_SATURATION;
- case CompositionOp::OP_COLOR:
- return D2D1_BLEND_MODE_COLOR;
- case CompositionOp::OP_LUMINOSITY:
- return D2D1_BLEND_MODE_LUMINOSITY;
- default:
- return D2D1_BLEND_MODE_MULTIPLY;
- }
-}
-
-static inline bool D2DSupportsPrimitiveBlendMode(CompositionOp aOp) {
- switch (aOp) {
- case CompositionOp::OP_OVER:
- // case CompositionOp::OP_SOURCE:
- // case CompositionOp::OP_DARKEN:
- case CompositionOp::OP_ADD:
- return true;
- default:
- return false;
- }
-}
-
-static inline D2D1_PRIMITIVE_BLEND D2DPrimitiveBlendMode(CompositionOp aOp) {
- switch (aOp) {
- case CompositionOp::OP_OVER:
- return D2D1_PRIMITIVE_BLEND_SOURCE_OVER;
- // D2D1_PRIMITIVE_BLEND_COPY should leave pixels out of the source's
- // bounds unchanged, but doesn't- breaking unbounded ops.
- // D2D1_PRIMITIVE_BLEND_MIN doesn't quite work like darken either, as it
- // accounts for the source alpha.
- //
- // case CompositionOp::OP_SOURCE:
- // return D2D1_PRIMITIVE_BLEND_COPY;
- // case CompositionOp::OP_DARKEN:
- // return D2D1_PRIMITIVE_BLEND_MIN;
- case CompositionOp::OP_ADD:
- return D2D1_PRIMITIVE_BLEND_ADD;
- default:
- return D2D1_PRIMITIVE_BLEND_SOURCE_OVER;
- }
-}
-
-static inline bool IsPatternSupportedByD2D(
- const Pattern& aPattern, CompositionOp aOp = CompositionOp::OP_OVER) {
- if (aOp == CompositionOp::OP_CLEAR) {
- return true;
- }
-
- if (aPattern.GetType() == PatternType::CONIC_GRADIENT) {
- return false;
- }
-
- if (aPattern.GetType() != PatternType::RADIAL_GRADIENT) {
- return true;
- }
-
- const RadialGradientPattern* pat =
- static_cast<const RadialGradientPattern*>(&aPattern);
-
- if (pat->mRadius1 != 0) {
- return false;
- }
-
- Point diff = pat->mCenter2 - pat->mCenter1;
-
- if (sqrt(diff.x.value * diff.x.value + diff.y.value * diff.y.value) >=
- pat->mRadius2) {
- // Inner point lies outside the circle.
- return false;
- }
-
- return true;
-}
-
-/**
- * This structure is used to pass rectangles to our shader constant. We can use
- * this for passing rectangular areas to SetVertexShaderConstant. In the format
- * of a 4 component float(x,y,width,height). Our vertex shader can then use
- * this to construct rectangular positions from the 0,0-1,1 quad that we source
- * it with.
- */
-struct ShaderConstantRectD3D10 {
- float mX, mY, mWidth, mHeight;
- ShaderConstantRectD3D10(float aX, float aY, float aWidth, float aHeight)
- : mX(aX), mY(aY), mWidth(aWidth), mHeight(aHeight) {}
-
- // For easy passing to SetVertexShaderConstantF.
- operator float*() { return &mX; }
-};
-
-static inline DWRITE_MATRIX DWriteMatrixFromMatrix(Matrix& aMatrix) {
- DWRITE_MATRIX mat;
- mat.m11 = aMatrix._11;
- mat.m12 = aMatrix._12;
- mat.m21 = aMatrix._21;
- mat.m22 = aMatrix._22;
- mat.dx = aMatrix._31;
- mat.dy = aMatrix._32;
- return mat;
-}
-
-class AutoDWriteGlyphRun : public DWRITE_GLYPH_RUN {
- static const unsigned kNumAutoGlyphs = 256;
-
- public:
- AutoDWriteGlyphRun() { glyphCount = 0; }
-
- ~AutoDWriteGlyphRun() {
- if (glyphCount > kNumAutoGlyphs) {
- delete[] glyphIndices;
- delete[] glyphAdvances;
- delete[] glyphOffsets;
- }
- }
-
- void allocate(unsigned aNumGlyphs) {
- glyphCount = aNumGlyphs;
- if (aNumGlyphs <= kNumAutoGlyphs) {
- glyphIndices = &mAutoIndices[0];
- glyphAdvances = &mAutoAdvances[0];
- glyphOffsets = &mAutoOffsets[0];
- } else {
- glyphIndices = new UINT16[aNumGlyphs];
- glyphAdvances = new FLOAT[aNumGlyphs];
- glyphOffsets = new DWRITE_GLYPH_OFFSET[aNumGlyphs];
- }
- }
-
- private:
- DWRITE_GLYPH_OFFSET mAutoOffsets[kNumAutoGlyphs];
- FLOAT mAutoAdvances[kNumAutoGlyphs];
- UINT16 mAutoIndices[kNumAutoGlyphs];
-};
-
-static inline void DWriteGlyphRunFromGlyphs(const GlyphBuffer& aGlyphs,
- ScaledFontDWrite* aFont,
- AutoDWriteGlyphRun* run) {
- run->allocate(aGlyphs.mNumGlyphs);
-
- FLOAT* advances = const_cast<FLOAT*>(run->glyphAdvances);
- UINT16* indices = const_cast<UINT16*>(run->glyphIndices);
- DWRITE_GLYPH_OFFSET* offsets =
- const_cast<DWRITE_GLYPH_OFFSET*>(run->glyphOffsets);
-
- memset(advances, 0, sizeof(FLOAT) * aGlyphs.mNumGlyphs);
- for (unsigned int i = 0; i < aGlyphs.mNumGlyphs; i++) {
- indices[i] = aGlyphs.mGlyphs[i].mIndex;
- offsets[i].advanceOffset = aGlyphs.mGlyphs[i].mPosition.x;
- offsets[i].ascenderOffset = -aGlyphs.mGlyphs[i].mPosition.y;
- }
-
- run->bidiLevel = 0;
- run->fontFace = aFont->mFontFace;
- run->fontEmSize = aFont->GetSize();
- run->glyphCount = aGlyphs.mNumGlyphs;
- run->isSideways = FALSE;
-}
-
-static inline already_AddRefed<ID2D1Geometry> ConvertRectToGeometry(
- const D2D1_RECT_F& aRect) {
- RefPtr<ID2D1RectangleGeometry> rectGeom;
- D2DFactory()->CreateRectangleGeometry(&aRect, getter_AddRefs(rectGeom));
- return rectGeom.forget();
-}
-
-static inline already_AddRefed<ID2D1Geometry> GetTransformedGeometry(
- ID2D1Geometry* aGeometry, const D2D1_MATRIX_3X2_F& aTransform) {
- RefPtr<ID2D1PathGeometry> tmpGeometry;
- D2DFactory()->CreatePathGeometry(getter_AddRefs(tmpGeometry));
- RefPtr<ID2D1GeometrySink> currentSink;
- tmpGeometry->Open(getter_AddRefs(currentSink));
- aGeometry->Simplify(D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES,
- aTransform, currentSink);
- currentSink->Close();
- return tmpGeometry.forget();
-}
-
-static inline already_AddRefed<ID2D1Geometry> IntersectGeometry(
- ID2D1Geometry* aGeometryA, ID2D1Geometry* aGeometryB) {
- RefPtr<ID2D1PathGeometry> pathGeom;
- D2DFactory()->CreatePathGeometry(getter_AddRefs(pathGeom));
- RefPtr<ID2D1GeometrySink> sink;
- pathGeom->Open(getter_AddRefs(sink));
- aGeometryA->CombineWithGeometry(aGeometryB, D2D1_COMBINE_MODE_INTERSECT,
- nullptr, sink);
- sink->Close();
-
- return pathGeom.forget();
-}
-
-static inline already_AddRefed<ID2D1StrokeStyle> CreateStrokeStyleForOptions(
- const StrokeOptions& aStrokeOptions) {
- RefPtr<ID2D1StrokeStyle> style;
-
- D2D1_CAP_STYLE capStyle;
- D2D1_LINE_JOIN joinStyle;
-
- switch (aStrokeOptions.mLineCap) {
- case CapStyle::BUTT:
- capStyle = D2D1_CAP_STYLE_FLAT;
- break;
- case CapStyle::ROUND:
- capStyle = D2D1_CAP_STYLE_ROUND;
- break;
- case CapStyle::SQUARE:
- capStyle = D2D1_CAP_STYLE_SQUARE;
- break;
- }
-
- switch (aStrokeOptions.mLineJoin) {
- case JoinStyle::MITER:
- joinStyle = D2D1_LINE_JOIN_MITER;
- break;
- case JoinStyle::MITER_OR_BEVEL:
- joinStyle = D2D1_LINE_JOIN_MITER_OR_BEVEL;
- break;
- case JoinStyle::ROUND:
- joinStyle = D2D1_LINE_JOIN_ROUND;
- break;
- case JoinStyle::BEVEL:
- joinStyle = D2D1_LINE_JOIN_BEVEL;
- break;
- }
-
- HRESULT hr;
- // We need to check mDashLength in addition to mDashPattern here since if
- // mDashPattern is set but mDashLength is zero then the stroke will fail to
- // paint.
- if (aStrokeOptions.mDashLength > 0 && aStrokeOptions.mDashPattern) {
- typedef std::vector<Float> FloatVector;
- // D2D "helpfully" multiplies the dash pattern by the line width.
- // That's not what cairo does, or is what <canvas>'s dash wants.
- // So fix the multiplication in advance.
- Float lineWidth = aStrokeOptions.mLineWidth;
- FloatVector dash(aStrokeOptions.mDashPattern,
- aStrokeOptions.mDashPattern + aStrokeOptions.mDashLength);
- for (FloatVector::iterator it = dash.begin(); it != dash.end(); ++it) {
- *it /= lineWidth;
- }
-
- hr = D2DFactory()->CreateStrokeStyle(
- D2D1::StrokeStyleProperties(
- capStyle, capStyle, capStyle, joinStyle, aStrokeOptions.mMiterLimit,
- D2D1_DASH_STYLE_CUSTOM, aStrokeOptions.mDashOffset / lineWidth),
- &dash[0], // data() is not C++98, although it's in recent gcc
- // and VC10's STL
- dash.size(), getter_AddRefs(style));
- } else {
- hr = D2DFactory()->CreateStrokeStyle(
- D2D1::StrokeStyleProperties(capStyle, capStyle, capStyle, joinStyle,
- aStrokeOptions.mMiterLimit),
- nullptr, 0, getter_AddRefs(style));
- }
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to create Direct2D stroke style.";
- }
-
- return style.forget();
-}
-
-// This creates a (partially) uploaded bitmap for a DataSourceSurface. It
-// uploads the minimum requirement and possibly downscales. It adjusts the
-// input Matrix to compensate.
-static inline already_AddRefed<ID2D1Bitmap> CreatePartialBitmapForSurface(
- DataSourceSurface* aSurface, const Matrix& aDestinationTransform,
- const IntSize& aDestinationSize, ExtendMode aExtendMode,
- Matrix& aSourceTransform, ID2D1RenderTarget* aRT,
- const IntRect* aSourceRect = nullptr) {
- RefPtr<ID2D1Bitmap> bitmap;
-
- // This is where things get complicated. The source surface was
- // created for a surface that was too large to fit in a texture.
- // We'll need to figure out if we can work with a partial upload
- // or downsample in software.
-
- Matrix transform = aDestinationTransform;
- Matrix invTransform = transform = aSourceTransform * transform;
- if (!invTransform.Invert()) {
- // Singular transform, nothing to be drawn.
- return nullptr;
- }
-
- Rect rect(0, 0, Float(aDestinationSize.width),
- Float(aDestinationSize.height));
-
- // Calculate the rectangle of the source mapped to our surface.
- rect = invTransform.TransformBounds(rect);
- rect.RoundOut();
-
- IntSize size = aSurface->GetSize();
-
- Rect uploadRect(0, 0, Float(size.width), Float(size.height));
- if (aSourceRect) {
- uploadRect = Rect(aSourceRect->X(), aSourceRect->Y(), aSourceRect->Width(),
- aSourceRect->Height());
- }
-
- // Limit the uploadRect as much as possible without supporting discontiguous
- // uploads
- //
- // clang-format off
- // region we will paint from
- // uploadRect
- // .---------------. .---------------. resulting uploadRect
- // | |rect | |
- // | .---------. .----. .----. .---------------.
- // | | | ----> | | | | ----> | |
- // | '---------' '----' '----' '---------------'
- // '---------------' '---------------'
- // clang-format on
- //
- //
-
- int Bpp = BytesPerPixel(aSurface->GetFormat());
-
- if (uploadRect.Contains(rect)) {
- // Extend mode is irrelevant, the displayed rect is completely contained
- // by the source bitmap.
- uploadRect = rect;
- } else if (aExtendMode == ExtendMode::CLAMP && uploadRect.Intersects(rect)) {
- // Calculate the rectangle on the source bitmap that touches our
- // surface, and upload that, for ExtendMode::CLAMP we can actually guarantee
- // correct behaviour in this case.
- uploadRect = uploadRect.Intersect(rect);
-
- // We now proceed to check if we can limit at least one dimension of the
- // upload rect safely without looking at extend mode.
- } else if (rect.X() >= 0 && rect.XMost() < size.width) {
- uploadRect.MoveToX(rect.X());
- uploadRect.SetWidth(rect.Width());
- } else if (rect.Y() >= 0 && rect.YMost() < size.height) {
- uploadRect.MoveToY(rect.Y());
- uploadRect.SetHeight(rect.Height());
- }
-
- if (uploadRect.IsEmpty()) {
- // Nothing to be drawn.
- return nullptr;
- }
-
- if (uploadRect.Width() <= aRT->GetMaximumBitmapSize() &&
- uploadRect.Height() <= aRT->GetMaximumBitmapSize()) {
- {
- // Scope to auto-Unmap() |mapping|.
- DataSourceSurface::ScopedMap mapping(aSurface, DataSourceSurface::READ);
- if (MOZ2D_WARN_IF(!mapping.IsMapped())) {
- return nullptr;
- }
-
- // A partial upload will suffice.
- aRT->CreateBitmap(
- D2D1::SizeU(uint32_t(uploadRect.Width()),
- uint32_t(uploadRect.Height())),
- mapping.GetData() + int(uploadRect.X()) * Bpp +
- int(uploadRect.Y()) * mapping.GetStride(),
- mapping.GetStride(),
- D2D1::BitmapProperties(D2DPixelFormat(aSurface->GetFormat())),
- getter_AddRefs(bitmap));
- }
-
- aSourceTransform.PreTranslate(uploadRect.X(), uploadRect.Y());
-
- return bitmap.forget();
- } else {
- if (Bpp != 4) {
- // This shouldn't actually happen in practice!
- MOZ_ASSERT(false);
- return nullptr;
- }
-
- {
- // Scope to auto-Unmap() |mapping|.
- DataSourceSurface::ScopedMap mapping(aSurface, DataSourceSurface::READ);
- if (MOZ2D_WARN_IF(!mapping.IsMapped())) {
- return nullptr;
- }
- ImageHalfScaler scaler(mapping.GetData(), mapping.GetStride(), size);
-
- // Calculate the maximum width/height of the image post transform.
- Point topRight = transform.TransformPoint(Point(Float(size.width), 0));
- Point topLeft = transform.TransformPoint(Point(0, 0));
- Point bottomRight = transform.TransformPoint(
- Point(Float(size.width), Float(size.height)));
- Point bottomLeft = transform.TransformPoint(Point(0, Float(size.height)));
-
- IntSize scaleSize;
-
- scaleSize.width = int32_t(std::max(Distance(topRight, topLeft),
- Distance(bottomRight, bottomLeft)));
- scaleSize.height = int32_t(std::max(Distance(topRight, bottomRight),
- Distance(topLeft, bottomLeft)));
-
- if (unsigned(scaleSize.width) > aRT->GetMaximumBitmapSize()) {
- // Ok, in this case we'd really want a downscale of a part of the
- // bitmap, perhaps we can do this later but for simplicity let's do
- // something different here and assume it's good enough, this should be
- // rare!
- scaleSize.width = 4095;
- }
- if (unsigned(scaleSize.height) > aRT->GetMaximumBitmapSize()) {
- scaleSize.height = 4095;
- }
-
- scaler.ScaleForSize(scaleSize);
-
- IntSize newSize = scaler.GetSize();
-
- if (newSize.IsEmpty()) {
- return nullptr;
- }
-
- aRT->CreateBitmap(
- D2D1::SizeU(newSize.width, newSize.height), scaler.GetScaledData(),
- scaler.GetStride(),
- D2D1::BitmapProperties(D2DPixelFormat(aSurface->GetFormat())),
- getter_AddRefs(bitmap));
-
- aSourceTransform.PreScale(Float(size.width) / newSize.width,
- Float(size.height) / newSize.height);
- }
- return bitmap.forget();
- }
-}
-
-static inline void AddRectToSink(ID2D1GeometrySink* aSink,
- const D2D1_RECT_F& aRect) {
- aSink->BeginFigure(D2D1::Point2F(aRect.left, aRect.top),
- D2D1_FIGURE_BEGIN_FILLED);
- aSink->AddLine(D2D1::Point2F(aRect.right, aRect.top));
- aSink->AddLine(D2D1::Point2F(aRect.right, aRect.bottom));
- aSink->AddLine(D2D1::Point2F(aRect.left, aRect.bottom));
- aSink->EndFigure(D2D1_FIGURE_END_CLOSED);
-}
-
-class DCCommandSink : public ID2D1CommandSink {
- public:
- explicit DCCommandSink(ID2D1DeviceContext* aCtx) : mCtx(aCtx) {}
-
- HRESULT STDMETHODCALLTYPE QueryInterface(const IID& aIID, void** aPtr) {
- if (!aPtr) {
- return E_POINTER;
- }
-
- if (aIID == IID_IUnknown) {
- *aPtr = static_cast<IUnknown*>(this);
- return S_OK;
- } else if (aIID == IID_ID2D1CommandSink) {
- *aPtr = static_cast<ID2D1CommandSink*>(this);
- return S_OK;
- }
-
- return E_NOINTERFACE;
- }
-
- ULONG STDMETHODCALLTYPE AddRef() { return 1; }
-
- ULONG STDMETHODCALLTYPE Release() { return 1; }
-
- STDMETHODIMP BeginDraw() {
- // We don't want to do anything here!
- return S_OK;
- }
- STDMETHODIMP EndDraw() {
- // We don't want to do anything here!
- return S_OK;
- }
-
- STDMETHODIMP SetAntialiasMode(D2D1_ANTIALIAS_MODE antialiasMode) {
- mCtx->SetAntialiasMode(antialiasMode);
- return S_OK;
- }
-
- STDMETHODIMP SetTags(D2D1_TAG tag1, D2D1_TAG tag2) {
- mCtx->SetTags(tag1, tag2);
- return S_OK;
- }
-
- STDMETHODIMP SetTextAntialiasMode(
- D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) {
- mCtx->SetTextAntialiasMode(textAntialiasMode);
- return S_OK;
- }
-
- STDMETHODIMP SetTextRenderingParams(
- _In_opt_ IDWriteRenderingParams* textRenderingParams) {
- mCtx->SetTextRenderingParams(textRenderingParams);
- return S_OK;
- }
-
- STDMETHODIMP SetTransform(_In_ CONST D2D1_MATRIX_3X2_F* transform) {
- mCtx->SetTransform(transform);
- return S_OK;
- }
-
- STDMETHODIMP SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND primitiveBlend) {
- mCtx->SetPrimitiveBlend(primitiveBlend);
- return S_OK;
- }
-
- STDMETHODIMP SetUnitMode(D2D1_UNIT_MODE unitMode) {
- mCtx->SetUnitMode(unitMode);
- return S_OK;
- }
-
- STDMETHODIMP Clear(_In_opt_ CONST D2D1_COLOR_F* color) {
- mCtx->Clear(color);
- return S_OK;
- }
-
- STDMETHODIMP DrawGlyphRun(
- D2D1_POINT_2F baselineOrigin, _In_ CONST DWRITE_GLYPH_RUN* glyphRun,
- _In_opt_ CONST DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,
- _In_ ID2D1Brush* foregroundBrush, DWRITE_MEASURING_MODE measuringMode) {
- mCtx->DrawGlyphRun(baselineOrigin, glyphRun, glyphRunDescription,
- foregroundBrush, measuringMode);
- return S_OK;
- }
-
- STDMETHODIMP DrawLine(D2D1_POINT_2F point0, D2D1_POINT_2F point1,
- _In_ ID2D1Brush* brush, FLOAT strokeWidth,
- _In_opt_ ID2D1StrokeStyle* strokeStyle) {
- mCtx->DrawLine(point0, point1, brush, strokeWidth, strokeStyle);
- return S_OK;
- }
-
- STDMETHODIMP DrawGeometry(_In_ ID2D1Geometry* geometry,
- _In_ ID2D1Brush* brush, FLOAT strokeWidth,
- _In_opt_ ID2D1StrokeStyle* strokeStyle) {
- mCtx->DrawGeometry(geometry, brush, strokeWidth, strokeStyle);
- return S_OK;
- }
-
- STDMETHODIMP DrawRectangle(_In_ CONST D2D1_RECT_F* rect,
- _In_ ID2D1Brush* brush, FLOAT strokeWidth,
- _In_opt_ ID2D1StrokeStyle* strokeStyle) {
- mCtx->DrawRectangle(rect, brush, strokeWidth, strokeStyle);
- return S_OK;
- }
-
- STDMETHODIMP DrawBitmap(
- _In_ ID2D1Bitmap* bitmap,
- _In_opt_ CONST D2D1_RECT_F* destinationRectangle, FLOAT opacity,
- D2D1_INTERPOLATION_MODE interpolationMode,
- _In_opt_ CONST D2D1_RECT_F* sourceRectangle,
- _In_opt_ CONST D2D1_MATRIX_4X4_F* perspectiveTransform) {
- mCtx->DrawBitmap(bitmap, destinationRectangle, opacity, interpolationMode,
- sourceRectangle, perspectiveTransform);
- return S_OK;
- }
-
- STDMETHODIMP DrawImage(_In_ ID2D1Image* image,
- _In_opt_ CONST D2D1_POINT_2F* targetOffset,
- _In_opt_ CONST D2D1_RECT_F* imageRectangle,
- D2D1_INTERPOLATION_MODE interpolationMode,
- D2D1_COMPOSITE_MODE compositeMode) {
- mCtx->DrawImage(image, targetOffset, imageRectangle, interpolationMode,
- compositeMode);
- return S_OK;
- }
-
- STDMETHODIMP DrawGdiMetafile(_In_ ID2D1GdiMetafile* gdiMetafile,
- _In_opt_ CONST D2D1_POINT_2F* targetOffset) {
- mCtx->DrawGdiMetafile(gdiMetafile, targetOffset);
- return S_OK;
- }
-
- STDMETHODIMP FillMesh(_In_ ID2D1Mesh* mesh, _In_ ID2D1Brush* brush) {
- mCtx->FillMesh(mesh, brush);
- return S_OK;
- }
-
- STDMETHODIMP FillOpacityMask(_In_ ID2D1Bitmap* opacityMask,
- _In_ ID2D1Brush* brush,
- _In_opt_ CONST D2D1_RECT_F* destinationRectangle,
- _In_opt_ CONST D2D1_RECT_F* sourceRectangle) {
- mCtx->FillOpacityMask(opacityMask, brush, destinationRectangle,
- sourceRectangle);
- return S_OK;
- }
-
- STDMETHODIMP FillGeometry(_In_ ID2D1Geometry* geometry,
- _In_ ID2D1Brush* brush,
- _In_opt_ ID2D1Brush* opacityBrush) {
- mCtx->FillGeometry(geometry, brush, opacityBrush);
- return S_OK;
- }
-
- STDMETHODIMP FillRectangle(_In_ CONST D2D1_RECT_F* rect,
- _In_ ID2D1Brush* brush) {
- mCtx->FillRectangle(rect, brush);
- return S_OK;
- }
-
- STDMETHODIMP PushAxisAlignedClip(_In_ CONST D2D1_RECT_F* clipRect,
- D2D1_ANTIALIAS_MODE antialiasMode) {
- mCtx->PushAxisAlignedClip(clipRect, antialiasMode);
- return S_OK;
- }
-
- STDMETHODIMP PushLayer(_In_ CONST D2D1_LAYER_PARAMETERS1* layerParameters1,
- _In_opt_ ID2D1Layer* layer) {
- mCtx->PushLayer(layerParameters1, layer);
- return S_OK;
- }
-
- STDMETHODIMP PopAxisAlignedClip() {
- mCtx->PopAxisAlignedClip();
- return S_OK;
- }
-
- STDMETHODIMP PopLayer() {
- mCtx->PopLayer();
- return S_OK;
- }
-
- ID2D1DeviceContext* mCtx;
-};
-
-class MOZ_STACK_CLASS AutoRestoreFP final {
- public:
- AutoRestoreFP() {
- // save the current floating point control word
- _controlfp_s(&savedFPSetting, 0, 0);
- UINT unused;
- // set the floating point control word to its default value
- _controlfp_s(&unused, _CW_DEFAULT, MCW_PC);
- }
- ~AutoRestoreFP() {
- UINT unused;
- // restore the saved floating point control word
- _controlfp_s(&unused, savedFPSetting, MCW_PC);
- }
-
- private:
- UINT savedFPSetting;
-};
-
-// Note that overrides of ID2D1SimplifiedGeometrySink methods in this class may
-// get called from D2D with nonstandard floating point settings (see comments in
-// bug 1134549) - use AutoRestoreFP to reset the floating point control word to
-// what we expect
-class StreamingGeometrySink : public ID2D1SimplifiedGeometrySink {
- public:
- explicit StreamingGeometrySink(PathSink* aSink) : mSink(aSink) {}
-
- HRESULT STDMETHODCALLTYPE QueryInterface(const IID& aIID, void** aPtr) {
- if (!aPtr) {
- return E_POINTER;
- }
-
- if (aIID == IID_IUnknown) {
- *aPtr = static_cast<IUnknown*>(this);
- return S_OK;
- } else if (aIID == IID_ID2D1SimplifiedGeometrySink) {
- *aPtr = static_cast<ID2D1SimplifiedGeometrySink*>(this);
- return S_OK;
- }
-
- return E_NOINTERFACE;
- }
-
- ULONG STDMETHODCALLTYPE AddRef() { return 1; }
-
- ULONG STDMETHODCALLTYPE Release() { return 1; }
-
- // We ignore SetFillMode, this depends on the destination sink.
- STDMETHOD_(void, SetFillMode)(D2D1_FILL_MODE aMode) { return; }
- STDMETHOD_(void, BeginFigure)
- (D2D1_POINT_2F aPoint, D2D1_FIGURE_BEGIN aBegin) {
- AutoRestoreFP resetFloatingPoint;
- mSink->MoveTo(ToPoint(aPoint));
- }
- STDMETHOD_(void, AddLines)(const D2D1_POINT_2F* aLines, UINT aCount) {
- AutoRestoreFP resetFloatingPoint;
- for (UINT i = 0; i < aCount; i++) {
- mSink->LineTo(ToPoint(aLines[i]));
- }
- }
- STDMETHOD_(void, AddBeziers)
- (const D2D1_BEZIER_SEGMENT* aSegments, UINT aCount) {
- AutoRestoreFP resetFloatingPoint;
- for (UINT i = 0; i < aCount; i++) {
- mSink->BezierTo(ToPoint(aSegments[i].point1),
- ToPoint(aSegments[i].point2),
- ToPoint(aSegments[i].point3));
- }
- }
- STDMETHOD(Close)() { /* Should never be called! */ return S_OK; }
- STDMETHOD_(void, SetSegmentFlags)
- (D2D1_PATH_SEGMENT aFlags) { /* Should never be called! */ }
-
- STDMETHOD_(void, EndFigure)(D2D1_FIGURE_END aEnd) {
- AutoRestoreFP resetFloatingPoint;
- if (aEnd == D2D1_FIGURE_END_CLOSED) {
- return mSink->Close();
- }
- }
-
- private:
- PathSink* mSink;
-};
-
-} // namespace gfx
-} // namespace mozilla
-
-#endif /* MOZILLA_GFX_HELPERSD2D_H_ */
diff --git a/gfx/2d/HelpersWin.h b/gfx/2d/HelpersWin.h
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef MOZILLA_GFX_HELPERSWIN_H_
+#define MOZILLA_GFX_HELPERSWIN_H_
+
+#include <dxgiformat.h>
+#include "2D.h"
+
+namespace mozilla {
+namespace gfx {
+
+static inline DXGI_FORMAT DXGIFormat(SurfaceFormat aFormat) {
+ switch (aFormat) {
+ case SurfaceFormat::B8G8R8A8:
+ return DXGI_FORMAT_B8G8R8A8_UNORM;
+ case SurfaceFormat::B8G8R8X8:
+ return DXGI_FORMAT_B8G8R8A8_UNORM;
+ case SurfaceFormat::A8:
+ return DXGI_FORMAT_A8_UNORM;
+ default:
+ return DXGI_FORMAT_UNKNOWN;
+ }
+}
+
+static inline SurfaceFormat ToPixelFormat(const DXGI_FORMAT& aFormat) {
+ switch (aFormat) {
+ case DXGI_FORMAT_A8_UNORM:
+ case DXGI_FORMAT_R8_UNORM:
+ return SurfaceFormat::A8;
+ default:
+ return SurfaceFormat::B8G8R8A8;
+ }
+}
+
+} // namespace gfx
+} // namespace mozilla
+
+#endif /* MOZILLA_GFX_HELPERSWIN_H_ */
diff --git a/gfx/2d/Logging.h b/gfx/2d/Logging.h
@@ -91,15 +91,12 @@ enum class LogReason : int {
D3D11FinalizeFrame,
D3D10SyncLock,
D3D11SyncLock,
- D2D1NoWriteMap,
JobStatusError,
FilterInputError,
FilterInputData, // 10
FilterInputRect,
FilterInputSet,
FilterInputFormat,
- FilterNodeD2D1Target,
- FilterNodeD2D1Backend,
SourceSurfaceIncompatible,
GlyphAllocFailedCairo,
GlyphAllocFailedCG,
@@ -632,12 +629,6 @@ class Log final {
case SurfaceType::DATA:
mMessage << "SurfaceType::DATA";
break;
- case SurfaceType::D2D1_BITMAP:
- mMessage << "SurfaceType::D2D1_BITMAP";
- break;
- case SurfaceType::D2D1_DRAWTARGET:
- mMessage << "SurfaceType::D2D1_DRAWTARGET";
- break;
case SurfaceType::CAIRO:
mMessage << "SurfaceType::CAIRO";
break;
@@ -653,9 +644,6 @@ class Log final {
case SurfaceType::SKIA:
mMessage << "SurfaceType::SKIA";
break;
- case SurfaceType::D2D1_1_IMAGE:
- mMessage << "SurfaceType::D2D1_1_IMAGE";
- break;
case SurfaceType::RECORDING:
mMessage << "SurfaceType::RECORDING";
break;
diff --git a/gfx/2d/PathD2D.cpp b/gfx/2d/PathD2D.cpp
@@ -1,428 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "PathD2D.h"
-#include "HelpersD2D.h"
-#include <math.h>
-#include "DrawTargetD2D1.h"
-#include "Logging.h"
-#include "PathHelpers.h"
-
-namespace mozilla {
-namespace gfx {
-
-already_AddRefed<PathBuilder> PathBuilderD2D::Create(FillRule aFillRule) {
- RefPtr<ID2D1PathGeometry> path;
- HRESULT hr =
- DrawTargetD2D1::factory()->CreatePathGeometry(getter_AddRefs(path));
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to create Direct2D Path Geometry. Code: "
- << hexa(hr);
- return nullptr;
- }
-
- RefPtr<ID2D1GeometrySink> sink;
- hr = path->Open(getter_AddRefs(sink));
- if (FAILED(hr)) {
- gfxWarning() << "Failed to access Direct2D Path Geometry. Code: "
- << hexa(hr);
- return nullptr;
- }
-
- if (aFillRule == FillRule::FILL_WINDING) {
- sink->SetFillMode(D2D1_FILL_MODE_WINDING);
- }
-
- return MakeAndAddRef<PathBuilderD2D>(sink, path, aFillRule,
- BackendType::DIRECT2D1_1);
-}
-
-// This class exists as a wrapper for ID2D1SimplifiedGeometry sink, it allows
-// a geometry to be duplicated into a geometry sink, while removing the final
-// figure end and thus allowing a figure that was implicitly closed to be
-// continued.
-class OpeningGeometrySink : public ID2D1SimplifiedGeometrySink {
- public:
- explicit OpeningGeometrySink(ID2D1SimplifiedGeometrySink* aSink)
- : mSink(aSink), mNeedsFigureEnded(false) {}
-
- HRESULT STDMETHODCALLTYPE QueryInterface(const IID& aIID, void** aPtr) {
- if (!aPtr) {
- return E_POINTER;
- }
-
- if (aIID == IID_IUnknown) {
- *aPtr = static_cast<IUnknown*>(this);
- return S_OK;
- } else if (aIID == IID_ID2D1SimplifiedGeometrySink) {
- *aPtr = static_cast<ID2D1SimplifiedGeometrySink*>(this);
- return S_OK;
- }
-
- return E_NOINTERFACE;
- }
-
- ULONG STDMETHODCALLTYPE AddRef() { return 1; }
-
- ULONG STDMETHODCALLTYPE Release() { return 1; }
-
- // We ignore SetFillMode, the copier will decide.
- STDMETHOD_(void, SetFillMode)(D2D1_FILL_MODE aMode) {
- EnsureFigureEnded();
- return;
- }
- STDMETHOD_(void, BeginFigure)
- (D2D1_POINT_2F aPoint, D2D1_FIGURE_BEGIN aBegin) {
- EnsureFigureEnded();
- return mSink->BeginFigure(aPoint, aBegin);
- }
- STDMETHOD_(void, AddLines)(const D2D1_POINT_2F* aLines, UINT aCount) {
- EnsureFigureEnded();
- return mSink->AddLines(aLines, aCount);
- }
- STDMETHOD_(void, AddBeziers)
- (const D2D1_BEZIER_SEGMENT* aSegments, UINT aCount) {
- EnsureFigureEnded();
- return mSink->AddBeziers(aSegments, aCount);
- }
- STDMETHOD(Close)() { /* Should never be called! */ return S_OK; }
- STDMETHOD_(void, SetSegmentFlags)(D2D1_PATH_SEGMENT aFlags) {
- return mSink->SetSegmentFlags(aFlags);
- }
-
- // This function is special - it's the reason this class exists.
- // It needs to intercept the very last endfigure. So that a user can
- // continue writing to this sink as if they never stopped.
- STDMETHOD_(void, EndFigure)(D2D1_FIGURE_END aEnd) {
- if (aEnd == D2D1_FIGURE_END_CLOSED) {
- return mSink->EndFigure(aEnd);
- } else {
- mNeedsFigureEnded = true;
- }
- }
-
- private:
- void EnsureFigureEnded() {
- if (mNeedsFigureEnded) {
- mSink->EndFigure(D2D1_FIGURE_END_OPEN);
- mNeedsFigureEnded = false;
- }
- }
-
- ID2D1SimplifiedGeometrySink* mSink;
- bool mNeedsFigureEnded;
-};
-
-PathBuilderD2D::~PathBuilderD2D() {}
-
-void PathBuilderD2D::MoveTo(const Point& aPoint) {
- if (mFigureActive) {
- mSink->EndFigure(D2D1_FIGURE_END_OPEN);
- mFigureActive = false;
- }
- EnsureActive(aPoint);
- mCurrentPoint = aPoint;
-}
-
-void PathBuilderD2D::LineTo(const Point& aPoint) {
- EnsureActive(aPoint);
- mSink->AddLine(D2DPoint(aPoint));
-
- mCurrentPoint = aPoint;
- mFigureEmpty = false;
-}
-
-void PathBuilderD2D::BezierTo(const Point& aCP1, const Point& aCP2,
- const Point& aCP3) {
- EnsureActive(aCP1);
- mSink->AddBezier(
- D2D1::BezierSegment(D2DPoint(aCP1), D2DPoint(aCP2), D2DPoint(aCP3)));
-
- mCurrentPoint = aCP3;
- mFigureEmpty = false;
-}
-
-void PathBuilderD2D::QuadraticBezierTo(const Point& aCP1, const Point& aCP2) {
- EnsureActive(aCP1);
- mSink->AddQuadraticBezier(
- D2D1::QuadraticBezierSegment(D2DPoint(aCP1), D2DPoint(aCP2)));
-
- mCurrentPoint = aCP2;
- mFigureEmpty = false;
-}
-
-void PathBuilderD2D::Close() {
- if (mFigureActive) {
- mSink->EndFigure(D2D1_FIGURE_END_CLOSED);
-
- mFigureActive = false;
-
- EnsureActive(mBeginPoint);
- }
-}
-
-void PathBuilderD2D::Arc(const Point& aOrigin, Float aRadius, Float aStartAngle,
- Float aEndAngle, bool aAntiClockwise) {
- MOZ_ASSERT(aRadius >= 0);
-
- // We want aEndAngle to come numerically after aStartAngle when taking into
- // account the sweep direction so that our calculation of the arcSize below
- // (large or small) works.
- Float sweepDirection = aAntiClockwise ? -1.0f : 1.0f;
-
- Float arcSweepLeft = (aEndAngle - aStartAngle) * sweepDirection;
- if (arcSweepLeft < 0) {
- // This calculation moves aStartAngle by a multiple of 2*Pi so that it is
- // the closest it can be to aEndAngle and still be numerically before
- // aEndAngle when taking into account sweepDirection.
- arcSweepLeft = Float(2.0f * M_PI) + fmodf(arcSweepLeft, Float(2.0f * M_PI));
- aStartAngle = aEndAngle - arcSweepLeft * sweepDirection;
- }
-
- // XXX - Workaround for now, D2D does not appear to do the desired thing when
- // the angle sweeps a complete circle.
- bool fullCircle = false;
- if (aEndAngle - aStartAngle >= 1.9999 * M_PI) {
- fullCircle = true;
- aEndAngle = Float(aStartAngle + M_PI * 1.9999);
- } else if (aStartAngle - aEndAngle >= 1.9999 * M_PI) {
- fullCircle = true;
- aStartAngle = Float(aEndAngle + M_PI * 1.9999);
- }
-
- Point startPoint;
- startPoint.x = aOrigin.x + aRadius * cos(aStartAngle);
- startPoint.y = aOrigin.y + aRadius * sin(aStartAngle);
-
- if (!mFigureActive) {
- EnsureActive(startPoint);
- } else {
- mSink->AddLine(D2DPoint(startPoint));
- }
-
- Point endPoint;
- endPoint.x = aOrigin.x + aRadius * cosf(aEndAngle);
- endPoint.y = aOrigin.y + aRadius * sinf(aEndAngle);
-
- D2D1_ARC_SIZE arcSize = D2D1_ARC_SIZE_SMALL;
- D2D1_SWEEP_DIRECTION direction = aAntiClockwise
- ? D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE
- : D2D1_SWEEP_DIRECTION_CLOCKWISE;
-
- // if startPoint and endPoint of our circle are too close there are D2D issues
- // with drawing the circle as a single arc
- const Float kEpsilon = 1e-5f;
- if (!fullCircle || (std::abs(startPoint.x - endPoint.x) +
- std::abs(startPoint.y - endPoint.y) >
- kEpsilon)) {
- if (aAntiClockwise) {
- if (aStartAngle - aEndAngle > M_PI) {
- arcSize = D2D1_ARC_SIZE_LARGE;
- }
- } else {
- if (aEndAngle - aStartAngle > M_PI) {
- arcSize = D2D1_ARC_SIZE_LARGE;
- }
- }
-
- mSink->AddArc(D2D1::ArcSegment(D2DPoint(endPoint),
- D2D1::SizeF(aRadius, aRadius), 0.0f,
- direction, arcSize));
- } else {
- // our first workaround attempt didn't work, so instead draw the circle as
- // two half-circles
- Float midAngle = aEndAngle > aStartAngle ? Float(aStartAngle + M_PI)
- : Float(aEndAngle + M_PI);
- Point midPoint;
- midPoint.x = aOrigin.x + aRadius * cosf(midAngle);
- midPoint.y = aOrigin.y + aRadius * sinf(midAngle);
-
- mSink->AddArc(D2D1::ArcSegment(D2DPoint(midPoint),
- D2D1::SizeF(aRadius, aRadius), 0.0f,
- direction, arcSize));
-
- // if the adjusted endPoint computed above is used here and endPoint !=
- // startPoint then this half of the circle won't render...
- mSink->AddArc(D2D1::ArcSegment(D2DPoint(startPoint),
- D2D1::SizeF(aRadius, aRadius), 0.0f,
- direction, arcSize));
- }
-
- mCurrentPoint = endPoint;
- mFigureEmpty = false;
-}
-
-void PathBuilderD2D::EnsureActive(const Point& aPoint) {
- if (!mFigureActive) {
- mSink->BeginFigure(D2DPoint(aPoint), D2D1_FIGURE_BEGIN_FILLED);
- mBeginPoint = aPoint;
- mFigureActive = true;
- }
-}
-
-already_AddRefed<Path> PathBuilderD2D::Finish() {
- if (mFigureActive) {
- mSink->EndFigure(D2D1_FIGURE_END_OPEN);
- }
-
- HRESULT hr = mSink->Close();
- if (FAILED(hr)) {
- gfxCriticalNote << "Failed to close PathSink. Code: " << hexa(hr);
- return nullptr;
- }
-
- return MakeAndAddRef<PathD2D>(mGeometry, mFigureActive, mFigureEmpty,
- mCurrentPoint, mFillRule, mBackendType);
-}
-
-already_AddRefed<PathBuilder> PathD2D::CopyToBuilder(FillRule aFillRule) const {
- return TransformedCopyToBuilder(Matrix(), aFillRule);
-}
-
-already_AddRefed<PathBuilder> PathD2D::TransformedCopyToBuilder(
- const Matrix& aTransform, FillRule aFillRule) const {
- RefPtr<ID2D1PathGeometry> path;
- HRESULT hr =
- DrawTargetD2D1::factory()->CreatePathGeometry(getter_AddRefs(path));
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to create PathGeometry. Code: " << hexa(hr);
- return nullptr;
- }
-
- RefPtr<ID2D1GeometrySink> sink;
- hr = path->Open(getter_AddRefs(sink));
- if (FAILED(hr)) {
- gfxWarning() << "Failed to open Geometry for writing. Code: " << hexa(hr);
- return nullptr;
- }
-
- if (aFillRule == FillRule::FILL_WINDING) {
- sink->SetFillMode(D2D1_FILL_MODE_WINDING);
- }
-
- if (mEndedActive) {
- OpeningGeometrySink wrapSink(sink);
- hr = mGeometry->Simplify(
- D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES,
- D2DMatrix(aTransform), &wrapSink);
- } else {
- hr = mGeometry->Simplify(
- D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES,
- D2DMatrix(aTransform), sink);
- }
- if (FAILED(hr)) {
- gfxWarning() << "Failed to simplify PathGeometry to tranformed copy. Code: "
- << hexa(hr) << " Active: " << mEndedActive;
- return nullptr;
- }
-
- RefPtr<PathBuilderD2D> pathBuilder =
- new PathBuilderD2D(sink, path, aFillRule, mBackendType);
-
- pathBuilder->mCurrentPoint = aTransform.TransformPoint(mEndPoint);
-
- if (mEndedActive) {
- pathBuilder->mFigureActive = true;
- }
-
- return pathBuilder.forget();
-}
-
-void PathD2D::StreamToSink(PathSink* aSink) const {
- HRESULT hr;
-
- StreamingGeometrySink sink(aSink);
-
- hr = mGeometry->Simplify(D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES,
- D2D1::IdentityMatrix(), &sink);
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to stream D2D path to sink. Code: " << hexa(hr);
- return;
- }
-}
-
-bool PathD2D::ContainsPoint(const Point& aPoint,
- const Matrix& aTransform) const {
- if (!aTransform.Determinant()) {
- // If the transform is not invertible, then don't consider point inside.
- return false;
- }
-
- BOOL result;
-
- HRESULT hr = mGeometry->FillContainsPoint(
- D2DPoint(aPoint), D2DMatrix(aTransform), 0.001f, &result);
-
- if (FAILED(hr)) {
- // Log
- return false;
- }
-
- return !!result;
-}
-
-bool PathD2D::StrokeContainsPoint(const StrokeOptions& aStrokeOptions,
- const Point& aPoint,
- const Matrix& aTransform) const {
- if (!aTransform.Determinant()) {
- // If the transform is not invertible, then don't consider point inside.
- return false;
- }
-
- BOOL result;
-
- RefPtr<ID2D1StrokeStyle> strokeStyle =
- CreateStrokeStyleForOptions(aStrokeOptions);
- HRESULT hr = mGeometry->StrokeContainsPoint(
- D2DPoint(aPoint), aStrokeOptions.mLineWidth, strokeStyle,
- D2DMatrix(aTransform), &result);
-
- if (FAILED(hr)) {
- // Log
- return false;
- }
-
- return !!result;
-}
-
-Rect PathD2D::GetBounds(const Matrix& aTransform) const {
- D2D1_RECT_F d2dBounds;
-
- HRESULT hr = mGeometry->GetBounds(D2DMatrix(aTransform), &d2dBounds);
-
- Rect bounds = ToRect(d2dBounds);
- if (FAILED(hr) || !bounds.IsFinite()) {
- gfxWarning() << "Failed to get stroked bounds for path. Code: " << hexa(hr);
- return Rect();
- }
-
- return bounds;
-}
-
-Rect PathD2D::GetStrokedBounds(const StrokeOptions& aStrokeOptions,
- const Matrix& aTransform) const {
- D2D1_RECT_F d2dBounds;
-
- RefPtr<ID2D1StrokeStyle> strokeStyle =
- CreateStrokeStyleForOptions(aStrokeOptions);
- HRESULT hr =
- mGeometry->GetWidenedBounds(aStrokeOptions.mLineWidth, strokeStyle,
- D2DMatrix(aTransform), &d2dBounds);
-
- Rect bounds = ToRect(d2dBounds);
- if (FAILED(hr) || !bounds.IsFinite()) {
- gfxWarning() << "Failed to get stroked bounds for path. Code: " << hexa(hr);
- return Rect();
- }
-
- return bounds;
-}
-
-} // namespace gfx
-} // namespace mozilla
diff --git a/gfx/2d/PathD2D.h b/gfx/2d/PathD2D.h
@@ -1,119 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_PATHD2D_H_
-#define MOZILLA_GFX_PATHD2D_H_
-
-#include <d2d1.h>
-
-#include "2D.h"
-
-namespace mozilla {
-namespace gfx {
-
-class PathD2D;
-
-class PathBuilderD2D : public PathBuilder {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PathBuilderD2D, override)
- PathBuilderD2D(ID2D1GeometrySink* aSink, ID2D1PathGeometry* aGeom,
- FillRule aFillRule, BackendType aBackendType)
- : mSink(aSink),
- mGeometry(aGeom),
- mFigureActive(false),
- mFillRule(aFillRule),
- mBackendType(aBackendType) {}
- virtual ~PathBuilderD2D();
-
- virtual void MoveTo(const Point& aPoint);
- virtual void LineTo(const Point& aPoint);
- virtual void BezierTo(const Point& aCP1, const Point& aCP2,
- const Point& aCP3);
- virtual void QuadraticBezierTo(const Point& aCP1, const Point& aCP2);
- virtual void Close();
- virtual void Arc(const Point& aOrigin, Float aRadius, Float aStartAngle,
- Float aEndAngle, bool aAntiClockwise = false);
-
- virtual already_AddRefed<Path> Finish();
-
- virtual BackendType GetBackendType() const { return mBackendType; }
-
- ID2D1GeometrySink* GetSink() { return mSink; }
-
- bool IsFigureActive() const { return mFigureActive; }
-
- virtual bool IsActive() const { return IsFigureActive(); }
-
- static already_AddRefed<PathBuilder> Create(FillRule aFillRule);
-
- private:
- friend class PathD2D;
-
- void EnsureActive(const Point& aPoint);
-
- RefPtr<ID2D1GeometrySink> mSink;
- RefPtr<ID2D1PathGeometry> mGeometry;
-
- bool mFigureActive;
- bool mFigureEmpty = true;
- FillRule mFillRule;
- BackendType mBackendType;
-};
-
-class PathD2D : public Path {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PathD2D, override)
- PathD2D(ID2D1PathGeometry* aGeometry, bool aEndedActive, bool aIsEmpty,
- const Point& aEndPoint, FillRule aFillRule, BackendType aBackendType)
- : mGeometry(aGeometry),
- mEndedActive(aEndedActive),
- mIsEmpty(aIsEmpty),
- mEndPoint(aEndPoint),
- mFillRule(aFillRule),
- mBackendType(aBackendType) {}
-
- virtual BackendType GetBackendType() const { return mBackendType; }
-
- virtual already_AddRefed<PathBuilder> CopyToBuilder(FillRule aFillRule) const;
- virtual already_AddRefed<PathBuilder> TransformedCopyToBuilder(
- const Matrix& aTransform, FillRule aFillRule) const;
-
- virtual bool ContainsPoint(const Point& aPoint,
- const Matrix& aTransform) const;
-
- virtual bool StrokeContainsPoint(const StrokeOptions& aStrokeOptions,
- const Point& aPoint,
- const Matrix& aTransform) const;
-
- virtual Rect GetBounds(const Matrix& aTransform = Matrix()) const;
-
- virtual Rect GetStrokedBounds(const StrokeOptions& aStrokeOptions,
- const Matrix& aTransform = Matrix()) const;
-
- virtual void StreamToSink(PathSink* aSink) const;
-
- virtual FillRule GetFillRule() const { return mFillRule; }
-
- bool IsEmpty() const override { return mIsEmpty; }
-
- ID2D1Geometry* GetGeometry() { return mGeometry; }
-
- private:
- friend class DrawTargetD2D;
- friend class DrawTargetD2D1;
-
- mutable RefPtr<ID2D1PathGeometry> mGeometry;
- bool mEndedActive;
- bool mIsEmpty;
- Point mEndPoint;
- FillRule mFillRule;
- BackendType mBackendType;
-};
-
-} // namespace gfx
-} // namespace mozilla
-
-#endif /* MOZILLA_GFX_PATHD2D_H_ */
diff --git a/gfx/2d/RadialGradientEffectD2D1.cpp b/gfx/2d/RadialGradientEffectD2D1.cpp
@@ -1,405 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "RadialGradientEffectD2D1.h"
-
-#include "Logging.h"
-
-#include "ShadersD2D1.h"
-#include "HelpersD2D.h"
-
-#include <vector>
-
-#define TEXTW(x) L##x
-#define XML(X) \
- TEXTW(#X) // This macro creates a single string from multiple lines of text.
-
-static const PCWSTR kXmlDescription =
- XML(
- <?xml version='1.0'?>
- <Effect>
- <!-- System Properties -->
- <Property name='DisplayName' type='string' value='RadialGradientEffect'/>
- <Property name='Author' type='string' value='Mozilla'/>
- <Property name='Category' type='string' value='Pattern effects'/>
- <Property name='Description' type='string' value='This effect is used to render radial gradients in a manner compliant with the 2D Canvas specification.'/>
- <Inputs>
- <Input name='Geometry'/>
- </Inputs>
- <Property name='StopCollection' type='iunknown'>
- <Property name='DisplayName' type='string' value='Gradient stop collection'/>
- </Property>
- <Property name='Center1' type='vector2'>
- <Property name='DisplayName' type='string' value='Inner circle center'/>
- </Property>
- <Property name='Center2' type='vector2'>
- <Property name='DisplayName' type='string' value='Outer circle center'/>
- </Property>
- <Property name='Radius1' type='float'>
- <Property name='DisplayName' type='string' value='Inner circle radius'/>
- </Property>
- <Property name='Radius2' type='float'>
- <Property name='DisplayName' type='string' value='Outer circle radius'/>
- </Property>
- <Property name='Transform' type='matrix3x2'>
- <Property name='DisplayName' type='string' value='Transform applied to the pattern'/>
- </Property>
-
- </Effect>
- );
-
-// {FB947CDA-718E-40CC-AE7B-D255830D7D14}
-static const GUID GUID_SampleRadialGradientPS = {
- 0xfb947cda,
- 0x718e,
- 0x40cc,
- {0xae, 0x7b, 0xd2, 0x55, 0x83, 0xd, 0x7d, 0x14}};
-// {2C468128-6546-453C-8E25-F2DF0DE10A0F}
-static const GUID GUID_SampleRadialGradientA0PS = {
- 0x2c468128, 0x6546, 0x453c, {0x8e, 0x25, 0xf2, 0xdf, 0xd, 0xe1, 0xa, 0xf}};
-
-namespace mozilla {
-namespace gfx {
-
-RadialGradientEffectD2D1::RadialGradientEffectD2D1()
- : mRefCount(0),
- mCenter1(D2D1::Vector2F(0, 0)),
- mCenter2(D2D1::Vector2F(0, 0)),
- mRadius1(0),
- mRadius2(0),
- mTransform(D2D1::IdentityMatrix())
-
-{}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::Initialize(ID2D1EffectContext* pContextInternal,
- ID2D1TransformGraph* pTransformGraph) {
- HRESULT hr;
-
- hr = pContextInternal->LoadPixelShader(GUID_SampleRadialGradientPS,
- SampleRadialGradientPS,
- sizeof(SampleRadialGradientPS));
-
- if (FAILED(hr)) {
- return hr;
- }
-
- hr = pContextInternal->LoadPixelShader(GUID_SampleRadialGradientA0PS,
- SampleRadialGradientA0PS,
- sizeof(SampleRadialGradientA0PS));
-
- if (FAILED(hr)) {
- return hr;
- }
-
- hr = pTransformGraph->SetSingleTransformNode(this);
-
- if (FAILED(hr)) {
- return hr;
- }
-
- mEffectContext = pContextInternal;
-
- return S_OK;
-}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::PrepareForRender(D2D1_CHANGE_TYPE changeType) {
- if (changeType == D2D1_CHANGE_TYPE_NONE) {
- return S_OK;
- }
-
- // We'll need to inverse transform our pixel, precompute inverse here.
- Matrix mat = ToMatrix(mTransform);
- if (!mat.Invert()) {
- // Singular
- return S_OK;
- }
-
- if (!mStopCollection) {
- return S_OK;
- }
-
- D2D1_POINT_2F dc =
- D2D1::Point2F(mCenter2.x - mCenter1.x, mCenter2.y - mCenter1.y);
- float dr = mRadius2 - mRadius1;
- float A = dc.x * dc.x + dc.y * dc.y - dr * dr;
-
- HRESULT hr;
-
- if (A == 0) {
- hr = mDrawInfo->SetPixelShader(GUID_SampleRadialGradientA0PS);
- } else {
- hr = mDrawInfo->SetPixelShader(GUID_SampleRadialGradientPS);
- }
-
- if (FAILED(hr)) {
- return hr;
- }
-
- RefPtr<ID2D1ResourceTexture> tex = CreateGradientTexture();
- hr = mDrawInfo->SetResourceTexture(1, tex);
-
- if (FAILED(hr)) {
- return hr;
- }
-
- struct PSConstantBuffer {
- float diff[3];
- float padding;
- float center1[2];
- float A;
- float radius1;
- float sq_radius1;
- float repeat_correct;
- float allow_odd;
- float padding2[1];
- float transform[8];
- };
-
- PSConstantBuffer buffer = {
- {dc.x, dc.y, dr},
- 0.0f,
- {mCenter1.x, mCenter1.y},
- A,
- mRadius1,
- mRadius1 * mRadius1,
- mStopCollection->GetExtendMode() != D2D1_EXTEND_MODE_CLAMP ? 1.0f : 0.0f,
- mStopCollection->GetExtendMode() == D2D1_EXTEND_MODE_MIRROR ? 1.0f : 0.0f,
- {0.0f},
- {mat._11, mat._21, mat._31, 0.0f, mat._12, mat._22, mat._32, 0.0f}};
-
- hr = mDrawInfo->SetPixelShaderConstantBuffer((BYTE*)&buffer, sizeof(buffer));
-
- if (FAILED(hr)) {
- return hr;
- }
-
- return S_OK;
-}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::SetGraph(ID2D1TransformGraph* pGraph) {
- return pGraph->SetSingleTransformNode(this);
-}
-
-IFACEMETHODIMP_(ULONG)
-RadialGradientEffectD2D1::AddRef() { return ++mRefCount; }
-
-IFACEMETHODIMP_(ULONG)
-RadialGradientEffectD2D1::Release() {
- if (!--mRefCount) {
- delete this;
- return 0;
- }
- return mRefCount;
-}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::QueryInterface(const IID& aIID, void** aPtr) {
- if (!aPtr) {
- return E_POINTER;
- }
-
- if (aIID == IID_IUnknown) {
- *aPtr = static_cast<IUnknown*>(static_cast<ID2D1EffectImpl*>(this));
- } else if (aIID == IID_ID2D1EffectImpl) {
- *aPtr = static_cast<ID2D1EffectImpl*>(this);
- } else if (aIID == IID_ID2D1DrawTransform) {
- *aPtr = static_cast<ID2D1DrawTransform*>(this);
- } else if (aIID == IID_ID2D1Transform) {
- *aPtr = static_cast<ID2D1Transform*>(this);
- } else if (aIID == IID_ID2D1TransformNode) {
- *aPtr = static_cast<ID2D1TransformNode*>(this);
- } else {
- return E_NOINTERFACE;
- }
-
- static_cast<IUnknown*>(*aPtr)->AddRef();
- return S_OK;
-}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::MapInputRectsToOutputRect(
- const D2D1_RECT_L* pInputRects, const D2D1_RECT_L* pInputOpaqueSubRects,
- UINT32 inputRectCount, D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pOutputOpaqueSubRect) {
- if (inputRectCount != 1) {
- return E_INVALIDARG;
- }
-
- *pOutputRect = *pInputRects;
- *pOutputOpaqueSubRect = *pInputOpaqueSubRects;
- return S_OK;
-}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::MapOutputRectToInputRects(
- const D2D1_RECT_L* pOutputRect, D2D1_RECT_L* pInputRects,
- UINT32 inputRectCount) const {
- if (inputRectCount != 1) {
- return E_INVALIDARG;
- }
-
- *pInputRects = *pOutputRect;
- return S_OK;
-}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::MapInvalidRect(
- UINT32 inputIndex, D2D1_RECT_L invalidInputRect,
- D2D1_RECT_L* pInvalidOutputRect) const {
- MOZ_ASSERT(inputIndex == 0);
-
- *pInvalidOutputRect = invalidInputRect;
- return S_OK;
-}
-
-IFACEMETHODIMP
-RadialGradientEffectD2D1::SetDrawInfo(ID2D1DrawInfo* pDrawInfo) {
- mDrawInfo = pDrawInfo;
- return S_OK;
-}
-
-HRESULT
-RadialGradientEffectD2D1::Register(ID2D1Factory1* aFactory) {
- D2D1_PROPERTY_BINDING bindings[] = {
- D2D1_VALUE_TYPE_BINDING(L"StopCollection",
- &RadialGradientEffectD2D1::SetStopCollection,
- &RadialGradientEffectD2D1::GetStopCollection),
- D2D1_VALUE_TYPE_BINDING(L"Center1", &RadialGradientEffectD2D1::SetCenter1,
- &RadialGradientEffectD2D1::GetCenter1),
- D2D1_VALUE_TYPE_BINDING(L"Center2", &RadialGradientEffectD2D1::SetCenter2,
- &RadialGradientEffectD2D1::GetCenter2),
- D2D1_VALUE_TYPE_BINDING(L"Radius1", &RadialGradientEffectD2D1::SetRadius1,
- &RadialGradientEffectD2D1::GetRadius1),
- D2D1_VALUE_TYPE_BINDING(L"Radius2", &RadialGradientEffectD2D1::SetRadius2,
- &RadialGradientEffectD2D1::GetRadius2),
- D2D1_VALUE_TYPE_BINDING(L"Transform",
- &RadialGradientEffectD2D1::SetTransform,
- &RadialGradientEffectD2D1::GetTransform)};
- HRESULT hr = aFactory->RegisterEffectFromString(
- CLSID_RadialGradientEffect, kXmlDescription, bindings,
- ARRAYSIZE(bindings), CreateEffect);
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to register radial gradient effect.";
- }
- return hr;
-}
-
-void RadialGradientEffectD2D1::Unregister(ID2D1Factory1* aFactory) {
- aFactory->UnregisterEffect(CLSID_RadialGradientEffect);
-}
-
-HRESULT __stdcall RadialGradientEffectD2D1::CreateEffect(
- IUnknown** aEffectImpl) {
- *aEffectImpl = static_cast<ID2D1EffectImpl*>(new RadialGradientEffectD2D1());
- (*aEffectImpl)->AddRef();
-
- return S_OK;
-}
-
-HRESULT
-RadialGradientEffectD2D1::SetStopCollection(IUnknown* aStopCollection) {
- if (SUCCEEDED(aStopCollection->QueryInterface(
- (ID2D1GradientStopCollection**)getter_AddRefs(mStopCollection)))) {
- return S_OK;
- }
-
- return E_INVALIDARG;
-}
-
-already_AddRefed<ID2D1ResourceTexture>
-RadialGradientEffectD2D1::CreateGradientTexture() {
- std::vector<D2D1_GRADIENT_STOP> rawStops;
- rawStops.resize(mStopCollection->GetGradientStopCount());
- mStopCollection->GetGradientStops(&rawStops.front(), rawStops.size());
-
- std::vector<unsigned char> textureData;
- textureData.resize(4096 * 4);
- unsigned char* texData = &textureData.front();
-
- float prevColorPos = 0;
- float nextColorPos = 1.0f;
- D2D1_COLOR_F prevColor = rawStops[0].color;
- D2D1_COLOR_F nextColor = prevColor;
-
- if (rawStops.size() >= 2) {
- nextColor = rawStops[1].color;
- nextColorPos = rawStops[1].position;
- }
-
- uint32_t stopPosition = 2;
-
- // Not the most optimized way but this will do for now.
- for (int i = 0; i < 4096; i++) {
- // The 4095 seems a little counter intuitive, but we want the gradient
- // color at offset 0 at the first pixel, and at offset 1.0f at the last
- // pixel.
- float pos = float(i) / 4095;
-
- while (pos > nextColorPos) {
- prevColor = nextColor;
- prevColorPos = nextColorPos;
- if (rawStops.size() > stopPosition) {
- nextColor = rawStops[stopPosition].color;
- nextColorPos = rawStops[stopPosition++].position;
- } else {
- nextColorPos = 1.0f;
- }
- }
-
- float interp;
-
- if (nextColorPos != prevColorPos) {
- interp = (pos - prevColorPos) / (nextColorPos - prevColorPos);
- } else {
- interp = 0;
- }
-
- DeviceColor newColor(prevColor.r + (nextColor.r - prevColor.r) * interp,
- prevColor.g + (nextColor.g - prevColor.g) * interp,
- prevColor.b + (nextColor.b - prevColor.b) * interp,
- prevColor.a + (nextColor.a - prevColor.a) * interp);
-
- // Note D2D expects RGBA here!!
- texData[i * 4] = (unsigned char)(255.0f * newColor.r);
- texData[i * 4 + 1] = (unsigned char)(255.0f * newColor.g);
- texData[i * 4 + 2] = (unsigned char)(255.0f * newColor.b);
- texData[i * 4 + 3] = (unsigned char)(255.0f * newColor.a);
- }
-
- RefPtr<ID2D1ResourceTexture> tex;
-
- UINT32 width = 4096;
- UINT32 stride = 4096 * 4;
- D2D1_RESOURCE_TEXTURE_PROPERTIES props;
- // Older shader models do not support 1D textures. So just use a width x 1
- // texture.
- props.dimensions = 2;
- UINT32 dims[] = {width, 1};
- props.extents = dims;
- props.channelDepth = D2D1_CHANNEL_DEPTH_4;
- props.bufferPrecision = D2D1_BUFFER_PRECISION_8BPC_UNORM;
- props.filter = D2D1_FILTER_MIN_MAG_MIP_LINEAR;
- D2D1_EXTEND_MODE extendMode[] = {mStopCollection->GetExtendMode(),
- mStopCollection->GetExtendMode()};
- props.extendModes = extendMode;
-
- HRESULT hr = mEffectContext->CreateResourceTexture(
- nullptr, &props, &textureData.front(), &stride, 4096 * 4,
- getter_AddRefs(tex));
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to create resource texture: " << hexa(hr);
- }
-
- return tex.forget();
-}
-
-} // namespace gfx
-} // namespace mozilla
diff --git a/gfx/2d/RadialGradientEffectD2D1.h b/gfx/2d/RadialGradientEffectD2D1.h
@@ -1,102 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_RADIALGRADIENTEFFECTD2D1_H_
-#define MOZILLA_GFX_RADIALGRADIENTEFFECTD2D1_H_
-
-#include <d2d1_1.h>
-#include <d2d1effectauthor.h>
-#include <d2d1effecthelpers.h>
-
-#include "2D.h"
-
-// {97143DC6-CBC4-4DD4-A8BA-13342B0BA46D}
-DEFINE_GUID(CLSID_RadialGradientEffect, 0x97143dc6, 0xcbc4, 0x4dd4, 0xa8, 0xba,
- 0x13, 0x34, 0x2b, 0xb, 0xa4, 0x6d);
-
-// Macro to keep our class nice and clean.
-#define SIMPLE_PROP(type, name) \
- public: \
- HRESULT Set##name(type a##name) { \
- m##name = a##name; \
- return S_OK; \
- } \
- type Get##name() const { return m##name; } \
- \
- private: \
- type m##name;
-
-namespace mozilla {
-namespace gfx {
-
-enum {
- RADIAL_PROP_STOP_COLLECTION = 0,
- RADIAL_PROP_CENTER_1,
- RADIAL_PROP_CENTER_2,
- RADIAL_PROP_RADIUS_1,
- RADIAL_PROP_RADIUS_2,
- RADIAL_PROP_TRANSFORM
-};
-
-class RadialGradientEffectD2D1 final : public ID2D1EffectImpl,
- public ID2D1DrawTransform {
- public:
- // ID2D1EffectImpl
- IFACEMETHODIMP Initialize(ID2D1EffectContext* pContextInternal,
- ID2D1TransformGraph* pTransformGraph);
- IFACEMETHODIMP PrepareForRender(D2D1_CHANGE_TYPE changeType);
- IFACEMETHODIMP SetGraph(ID2D1TransformGraph* pGraph);
-
- // IUnknown
- IFACEMETHODIMP_(ULONG) AddRef();
- IFACEMETHODIMP_(ULONG) Release();
- IFACEMETHODIMP QueryInterface(REFIID riid, void** ppOutput);
-
- // ID2D1Transform
- IFACEMETHODIMP MapInputRectsToOutputRect(
- const D2D1_RECT_L* pInputRects, const D2D1_RECT_L* pInputOpaqueSubRects,
- UINT32 inputRectCount, D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pOutputOpaqueSubRect);
- IFACEMETHODIMP MapOutputRectToInputRects(const D2D1_RECT_L* pOutputRect,
- D2D1_RECT_L* pInputRects,
- UINT32 inputRectCount) const;
- IFACEMETHODIMP MapInvalidRect(UINT32 inputIndex, D2D1_RECT_L invalidInputRect,
- D2D1_RECT_L* pInvalidOutputRect) const;
-
- // ID2D1TransformNode
- IFACEMETHODIMP_(UINT32) GetInputCount() const { return 1; }
-
- // ID2D1DrawTransform
- IFACEMETHODIMP SetDrawInfo(ID2D1DrawInfo* pDrawInfo);
-
- static HRESULT Register(ID2D1Factory1* aFactory);
- static void Unregister(ID2D1Factory1* aFactory);
- static HRESULT __stdcall CreateEffect(IUnknown** aEffectImpl);
-
- HRESULT SetStopCollection(IUnknown* aStopCollection);
- IUnknown* GetStopCollection() const { return mStopCollection; }
-
- private:
- already_AddRefed<ID2D1ResourceTexture> CreateGradientTexture();
-
- RadialGradientEffectD2D1();
-
- uint32_t mRefCount;
- RefPtr<ID2D1GradientStopCollection> mStopCollection;
- RefPtr<ID2D1EffectContext> mEffectContext;
- RefPtr<ID2D1DrawInfo> mDrawInfo;
- SIMPLE_PROP(D2D1_VECTOR_2F, Center1);
- SIMPLE_PROP(D2D1_VECTOR_2F, Center2);
- SIMPLE_PROP(FLOAT, Radius1);
- SIMPLE_PROP(FLOAT, Radius2);
- SIMPLE_PROP(D2D_MATRIX_3X2_F, Transform);
-};
-
-} // namespace gfx
-} // namespace mozilla
-#undef SIMPLE_PROP
-
-#endif
diff --git a/gfx/2d/RecordedEventImpl.h b/gfx/2d/RecordedEventImpl.h
@@ -1884,8 +1884,6 @@ static std::string NameFromBackend(BackendType aType) {
switch (aType) {
case BackendType::NONE:
return "None";
- case BackendType::DIRECT2D:
- return "Direct2D";
default:
return "Unknown";
}
diff --git a/gfx/2d/ScaledFontDWrite.cpp b/gfx/2d/ScaledFontDWrite.cpp
@@ -7,12 +7,10 @@
#include "ScaledFontDWrite.h"
#include "gfxDWriteCommon.h"
#include "UnscaledFontDWrite.h"
-#include "PathD2D.h"
#include "gfxFont.h"
#include "Logging.h"
#include "mozilla/FontPropertyTypes.h"
#include "mozilla/webrender/WebRenderTypes.h"
-#include "HelpersD2D.h"
#include "StackArray.h"
#include "dwrite_3.h"
@@ -95,23 +93,6 @@ ScaledFontDWrite::ScaledFontDWrite(IDWriteFontFace* aFontFace,
}
}
-already_AddRefed<Path> ScaledFontDWrite::GetPathForGlyphs(
- const GlyphBuffer& aBuffer, const DrawTarget* aTarget) {
- RefPtr<PathBuilder> pathBuilder = aTarget->CreatePathBuilder();
-
- if (pathBuilder->GetBackendType() != BackendType::DIRECT2D &&
- pathBuilder->GetBackendType() != BackendType::DIRECT2D1_1) {
- return ScaledFontBase::GetPathForGlyphs(aBuffer, aTarget);
- }
-
- PathBuilderD2D* pathBuilderD2D =
- static_cast<PathBuilderD2D*>(pathBuilder.get());
-
- CopyGlyphsToSink(aBuffer, pathBuilderD2D->GetSink());
-
- return pathBuilder->Finish();
-}
-
SkTypeface* ScaledFontDWrite::CreateSkTypeface() {
RefPtr<IDWriteFactory> factory = Factory::GetDWriteFactory();
if (!factory) {
@@ -155,51 +136,6 @@ bool ScaledFontDWrite::MayUseBitmaps() {
return ForceGDIMode() || UseEmbeddedBitmaps();
}
-void ScaledFontDWrite::CopyGlyphsToBuilder(const GlyphBuffer& aBuffer,
- PathBuilder* aBuilder,
- const Matrix* aTransformHint) {
- BackendType backendType = aBuilder->GetBackendType();
- if (backendType != BackendType::DIRECT2D &&
- backendType != BackendType::DIRECT2D1_1) {
- ScaledFontBase::CopyGlyphsToBuilder(aBuffer, aBuilder, aTransformHint);
- return;
- }
-
- PathBuilderD2D* pathBuilderD2D = static_cast<PathBuilderD2D*>(aBuilder);
-
- if (pathBuilderD2D->IsFigureActive()) {
- gfxCriticalNote
- << "Attempting to copy glyphs to PathBuilderD2D with active figure.";
- }
-
- CopyGlyphsToSink(aBuffer, pathBuilderD2D->GetSink());
-}
-
-void ScaledFontDWrite::CopyGlyphsToSink(const GlyphBuffer& aBuffer,
- ID2D1SimplifiedGeometrySink* aSink) {
- std::vector<UINT16> indices;
- std::vector<FLOAT> advances;
- std::vector<DWRITE_GLYPH_OFFSET> offsets;
- indices.resize(aBuffer.mNumGlyphs);
- advances.resize(aBuffer.mNumGlyphs);
- offsets.resize(aBuffer.mNumGlyphs);
-
- memset(&advances.front(), 0, sizeof(FLOAT) * aBuffer.mNumGlyphs);
- for (unsigned int i = 0; i < aBuffer.mNumGlyphs; i++) {
- indices[i] = aBuffer.mGlyphs[i].mIndex;
- offsets[i].advanceOffset = aBuffer.mGlyphs[i].mPosition.x;
- offsets[i].ascenderOffset = -aBuffer.mGlyphs[i].mPosition.y;
- }
-
- HRESULT hr = mFontFace->GetGlyphRunOutline(
- mSize, &indices.front(), &advances.front(), &offsets.front(),
- aBuffer.mNumGlyphs, FALSE, FALSE, aSink);
- if (FAILED(hr)) {
- gfxCriticalNote << "Failed to copy glyphs to geometry sink. Code: "
- << hexa(hr);
- }
-}
-
bool UnscaledFontDWrite::GetFontFileData(FontFileDataOutput aDataCallback,
void* aBaton) {
UINT32 fileCount = 0;
diff --git a/gfx/2d/ScaledFontDWrite.h b/gfx/2d/ScaledFontDWrite.h
@@ -11,7 +11,6 @@
#include "DWriteSettings.h"
#include "ScaledFontBase.h"
-struct ID2D1GeometrySink;
struct gfxFontStyle;
namespace mozilla {
@@ -30,14 +29,6 @@ class ScaledFontDWrite final : public ScaledFontBase {
FontType GetType() const override { return FontType::DWRITE; }
- already_AddRefed<Path> GetPathForGlyphs(const GlyphBuffer& aBuffer,
- const DrawTarget* aTarget) override;
- void CopyGlyphsToBuilder(const GlyphBuffer& aBuffer, PathBuilder* aBuilder,
- const Matrix* aTransformHint) override;
-
- void CopyGlyphsToSink(const GlyphBuffer& aBuffer,
- ID2D1SimplifiedGeometrySink* aSink);
-
bool CanSerialize() override { return true; }
bool MayUseBitmaps() override;
diff --git a/gfx/2d/ShadersD2D.fx b/gfx/2d/ShadersD2D.fx
@@ -1,824 +0,0 @@
-// We store vertex coordinates and the quad shape in a constant buffer, this is
-// easy to update and allows us to use a single call to set the x, y, w, h of
-// the quad.
-// The QuadDesc and TexCoords both work as follows:
-// The x component is the quad left point, the y component is the top point
-// the z component is the width, and the w component is the height. The quad
-// are specified in viewport coordinates, i.e. { -1.0f, 1.0f, 2.0f, -2.0f }
-// would cover the entire viewport (which runs from <-1.0f, 1.0f> left to right
-// and <-1.0f, 1.0f> -bottom- to top. The TexCoords desc is specified in texture
-// space <0, 1.0f> left to right and top to bottom. The input vertices of the
-// shader stage always form a rectangle from {0, 0} - {1, 1}
-cbuffer cb0
-{
- float4 QuadDesc;
- float4 TexCoords;
- float4 MaskTexCoords;
- float4 TextColor;
-}
-
-cbuffer cb1
-{
- float4 BlurOffsetsH[3];
- float4 BlurOffsetsV[3];
- float4 BlurWeights[3];
- float4 ShadowColor;
-}
-
-cbuffer cb2
-{
- float3x3 DeviceSpaceToUserSpace;
- float2 dimensions;
- // Precalculate as much as we can!
- float3 diff;
- float2 center1;
- float A;
- float radius1;
- float sq_radius1;
-}
-
-cbuffer cb3
-{
- float3x3 DeviceSpaceToUserSpace_cb3;
- float2 dimensions_cb3;
- float2 center;
- float angle;
- float start_offset;
- float end_offset;
-}
-
-struct VS_OUTPUT
-{
- float4 Position : SV_Position;
- float2 TexCoord : TEXCOORD0;
- float2 MaskTexCoord : TEXCOORD1;
-};
-
-struct VS_RADIAL_OUTPUT
-{
- float4 Position : SV_Position;
- float2 MaskTexCoord : TEXCOORD0;
- float2 PixelCoord : TEXCOORD1;
-};
-
-struct VS_CONIC_OUTPUT
-{
- float4 Position : SV_Position;
- float2 MaskTexCoord : TEXCOORD0;
- float2 PixelCoord : TEXCOORD1;
-};
-
-struct PS_TEXT_OUTPUT
-{
- float4 color;
- float4 alpha;
-};
-
-Texture2D tex;
-Texture2D bcktex;
-Texture2D mask;
-uint blendop;
-
-sampler sSampler = sampler_state {
- Filter = MIN_MAG_MIP_LINEAR;
- Texture = tex;
- AddressU = Clamp;
- AddressV = Clamp;
-};
-
-sampler sBckSampler = sampler_state {
- Filter = MIN_MAG_MIP_LINEAR;
- Texture = bcktex;
- AddressU = Clamp;
- AddressV = Clamp;
-};
-
-sampler sWrapSampler = sampler_state {
- Filter = MIN_MAG_MIP_LINEAR;
- Texture = tex;
- AddressU = Wrap;
- AddressV = Wrap;
-};
-
-sampler sMirrorSampler = sampler_state {
- Filter = MIN_MAG_MIP_LINEAR;
- Texture = tex;
- AddressU = Mirror;
- AddressV = Mirror;
-};
-
-sampler sMaskSampler = sampler_state {
- Filter = MIN_MAG_MIP_LINEAR;
- Texture = mask;
- AddressU = Clamp;
- AddressV = Clamp;
-};
-
-sampler sShadowSampler = sampler_state {
- Filter = MIN_MAG_MIP_LINEAR;
- Texture = tex;
- AddressU = Border;
- AddressV = Border;
- BorderColor = float4(0, 0, 0, 0);
-};
-
-RasterizerState TextureRast
-{
- ScissorEnable = True;
- CullMode = None;
-};
-
-BlendState ShadowBlendH
-{
- BlendEnable[0] = False;
- RenderTargetWriteMask[0] = 0xF;
-};
-
-BlendState ShadowBlendV
-{
- BlendEnable[0] = True;
- SrcBlend = One;
- DestBlend = Inv_Src_Alpha;
- BlendOp = Add;
- SrcBlendAlpha = One;
- DestBlendAlpha = Inv_Src_Alpha;
- BlendOpAlpha = Add;
- RenderTargetWriteMask[0] = 0xF;
-};
-
-BlendState bTextBlend
-{
- AlphaToCoverageEnable = FALSE;
- BlendEnable[0] = TRUE;
- SrcBlend = Src1_Color;
- DestBlend = Inv_Src1_Color;
- BlendOp = Add;
- SrcBlendAlpha = Src1_Alpha;
- DestBlendAlpha = Inv_Src1_Alpha;
- BlendOpAlpha = Add;
- RenderTargetWriteMask[0] = 0x0F; // All
-};
-
-VS_OUTPUT SampleTextureVS(float3 pos : POSITION)
-{
- VS_OUTPUT Output;
- Output.Position.w = 1.0f;
- Output.Position.x = pos.x * QuadDesc.z + QuadDesc.x;
- Output.Position.y = pos.y * QuadDesc.w + QuadDesc.y;
- Output.Position.z = 0;
- Output.TexCoord.x = pos.x * TexCoords.z + TexCoords.x;
- Output.TexCoord.y = pos.y * TexCoords.w + TexCoords.y;
- Output.MaskTexCoord.x = pos.x * MaskTexCoords.z + MaskTexCoords.x;
- Output.MaskTexCoord.y = pos.y * MaskTexCoords.w + MaskTexCoords.y;
- return Output;
-}
-
-VS_RADIAL_OUTPUT SampleRadialVS(float3 pos : POSITION)
-{
- VS_RADIAL_OUTPUT Output;
- Output.Position.w = 1.0f;
- Output.Position.x = pos.x * QuadDesc.z + QuadDesc.x;
- Output.Position.y = pos.y * QuadDesc.w + QuadDesc.y;
- Output.Position.z = 0;
- Output.MaskTexCoord.x = pos.x * MaskTexCoords.z + MaskTexCoords.x;
- Output.MaskTexCoord.y = pos.y * MaskTexCoords.w + MaskTexCoords.y;
-
- // For the radial gradient pixel shader we need to pass in the pixel's
- // coordinates in user space for the color to be correctly determined.
-
- Output.PixelCoord.x = ((Output.Position.x + 1.0f) / 2.0f) * dimensions.x;
- Output.PixelCoord.y = ((1.0f - Output.Position.y) / 2.0f) * dimensions.y;
- Output.PixelCoord.xy = mul(float3(Output.PixelCoord.x, Output.PixelCoord.y, 1.0f), DeviceSpaceToUserSpace).xy;
- return Output;
-}
-
-VS_CONIC_OUTPUT SampleConicVS(float3 pos : POSITION)
-{
- VS_CONIC_OUTPUT Output;
- Output.Position.w = 1.0f;
- Output.Position.x = pos.x * QuadDesc.z + QuadDesc.x;
- Output.Position.y = pos.y * QuadDesc.w + QuadDesc.y;
- Output.Position.z = 0;
- Output.MaskTexCoord.x = pos.x * MaskTexCoords.z + MaskTexCoords.x;
- Output.MaskTexCoord.y = pos.y * MaskTexCoords.w + MaskTexCoords.y;
-
- // For the conic gradient pixel shader we need to pass in the pixel's
- // coordinates in user space for the color to be correctly determined.
-
- Output.PixelCoord.x = ((Output.Position.x + 1.0f) / 2.0f) * dimensions_cb3.x;
- Output.PixelCoord.y = ((1.0f - Output.Position.y) / 2.0f) * dimensions_cb3.y;
- Output.PixelCoord.xy = mul(float3(Output.PixelCoord.x, Output.PixelCoord.y, 1.0f), DeviceSpaceToUserSpace_cb3).xy;
- return Output;
-}
-
-float Screen(float a, float b)
-{
- return 1 - ((1 - a)*(1 - b));
-}
-
-static float RedLuminance = 0.3f;
-static float GreenLuminance = 0.59f;
-static float BlueLuminance = 0.11f;
-
-float Lum(float3 C)
-{
- return RedLuminance * C.r + GreenLuminance * C.g + BlueLuminance * C.b;
-}
-
-float3 ClipColor(float3 C)
-{
- float L = Lum(C);
- float n = min(min(C.r, C.g), C.b);
- float x = max(max(C.r, C.g), C.b);
-
- if(n < 0)
- C = L + (((C - L) * L) / (L - n));
-
- if(x > 1)
- C = L + ((C - L) * (1 - L) / (x - L));
-
- return C;
-}
-
-float3 SetLum(float3 C, float l)
-{
- float d = l - Lum(C);
- C = C + d;
- return ClipColor(C);
-}
-
-float Sat(float3 C)
-{
- return max(C.r, max(C.g, C.b)) - min(C.r, min(C.g, C.b));
-}
-
-void SetSatComponents(inout float minComp, inout float midComp, inout float maxComp, in float satVal)
-{
- midComp -= minComp;
- maxComp -= minComp;
- minComp = 0.0;
- if (maxComp > 0.0)
- {
- midComp *= satVal/maxComp;
- maxComp = satVal;
- }
-}
-
-float3 SetSat(float3 color, in float satVal)
-{
- if (color.x <= color.y) {
- if (color.y <= color.z) {
- // x <= y <= z
- SetSatComponents(color.x, color.y, color.z, satVal);
- }
- else {
- if (color.x <= color.z) {
- // x <= z <= y
- SetSatComponents(color.x, color.z, color.y, satVal);
- }
- else {
- // z <= x <= y
- SetSatComponents(color.z, color.x, color.y, satVal);
- }
- }
- }
- else {
- if (color.x <= color.z) {
- // y <= x <= z
- SetSatComponents(color.y, color.x, color.z, satVal);
- }
- else {
- if (color.y <= color.z) {
- // y <= z <= x
- SetSatComponents(color.y, color.z, color.x, satVal);
- }
- else {
- // z <= y <= x
- SetSatComponents(color.z, color.y, color.x, satVal);
- }
- }
- }
-
- return color;
-}
-
-float4 SampleBlendTextureSeparablePS_1( VS_OUTPUT In) : SV_Target
-{
- float4 output = tex.Sample(sSampler, In.TexCoord);
- float4 background = bcktex.Sample(sBckSampler, In.TexCoord);
- if((output.a == 0) || (background.a == 0))
- return output;
-
- output.rgb /= output.a;
- background.rgb /= background.a;
-
- float4 retval = output;
-
- if(blendop == 1) { // multiply
- retval.rgb = output.rgb * background.rgb;
- } else if(blendop == 2) {
- retval.rgb = output.rgb + background.rgb - output.rgb * background.rgb;
- } else if(blendop == 3) {
- if(background.r <= 0.5)
- retval.r = 2*background.r * output.r;
- else
- retval.r = Screen(output.r, 2 * background.r - 1);
- if(background.g <= 0.5)
- retval.g = 2 * background.g * output.g;
- else
- retval.g = Screen(output.g, 2 * background.g - 1);
- if(background.b <= 0.5)
- retval.b = 2 * background.b * output.b;
- else
- retval.b = Screen(output.b, 2 * background.b - 1);
- } else if(blendop == 4) {
- retval.rgb = min(output.rgb, background.rgb);
- } else if(blendop == 5) {
- retval.rgb = max(output.rgb, background.rgb);
- } else {
- if(background.r == 0)
- retval.r = 0;
- else
- if(output.r == 1)
- retval.r = 1;
- else
- retval.r = min(1, background.r / (1 - output.r));
- if(background.g == 0)
- retval.g = 0;
- else
- if(output.g == 1)
- retval.g = 1;
- else
- retval.g = min(1, background.g / (1 - output.g));
- if(background.b == 0)
- retval.b = 0;
- else
- if(output.b == 1)
- retval.b = 1;
- else
- retval.b = min(1, background.b / (1 - output.b));
- }
-
- output.rgb = ((1 - background.a) * output.rgb + background.a * retval.rgb) * output.a;
- return output;
-}
-
-float4 SampleBlendTextureSeparablePS_2( VS_OUTPUT In) : SV_Target
-{
- float4 output = tex.Sample(sSampler, In.TexCoord);
- float4 background = bcktex.Sample(sBckSampler, In.TexCoord);
- if((output.a == 0) || (background.a == 0))
- return output;
-
- output.rgb /= output.a;
- background.rgb /= background.a;
-
- float4 retval = output;
-
- if(blendop == 7) {
- if(background.r == 1)
- retval.r = 1;
- else
- if(output.r == 0)
- retval.r = 0;
- else
- retval.r = 1 - min(1, (1 - background.r) / output.r);
- if(background.g == 1)
- retval.g = 1;
- else
- if(output.g == 0)
- retval.g = 0;
- else
- retval.g = 1 - min(1, (1 - background.g) / output.g);
- if(background.b == 1)
- retval.b = 1;
- else
- if(output.b == 0)
- retval.b = 0;
- else
- retval.b = 1 - min(1, (1 - background.b) / output.b);
- } else if(blendop == 8) {
- if(output.r <= 0.5)
- retval.r = 2 * output.r * background.r;
- else
- retval.r = Screen(background.r, 2 * output.r -1);
- if(output.g <= 0.5)
- retval.g = 2 * output.g * background.g;
- else
- retval.g = Screen(background.g, 2 * output.g -1);
- if(output.b <= 0.5)
- retval.b = 2 * output.b * background.b;
- else
- retval.b = Screen(background.b, 2 * output.b -1);
- } else if(blendop == 9){
- float D;
- if(background.r <= 0.25)
- D = ((16 * background.r - 12) * background.r + 4) * background.r;
- else
- D = sqrt(background.r);
- if(output.r <= 0.5)
- retval.r = background.r - (1 - 2 * output.r) * background.r * (1 - background.r);
- else
- retval.r = background.r + (2 * output.r - 1) * (D - background.r);
-
- if(background.g <= 0.25)
- D = ((16 * background.g - 12) * background.g + 4) * background.g;
- else
- D = sqrt(background.g);
- if(output.g <= 0.5)
- retval.g = background.g - (1 - 2 * output.g) * background.g * (1 - background.g);
- else
- retval.g = background.g + (2 * output.g - 1) * (D - background.g);
-
- if(background.b <= 0.25)
- D = ((16 * background.b - 12) * background.b + 4) * background.b;
- else
- D = sqrt(background.b);
-
- if(output.b <= 0.5)
- retval.b = background.b - (1 - 2 * output.b) * background.b * (1 - background.b);
- else
- retval.b = background.b + (2 * output.b - 1) * (D - background.b);
- } else if(blendop == 10) {
- retval.rgb = abs(output.rgb - background.rgb);
- } else {
- retval.rgb = output.rgb + background.rgb - 2 * output.rgb * background.rgb;
- }
-
- output.rgb = ((1 - background.a) * output.rgb + background.a * retval.rgb) * output.a;
- return output;
-}
-
-float4 SampleBlendTextureNonSeparablePS( VS_OUTPUT In) : SV_Target
-{
- float4 output = tex.Sample(sSampler, In.TexCoord);
- float4 background = bcktex.Sample(sBckSampler, In.TexCoord);
- if((output.a == 0) || (background.a == 0))
- return output;
-
- output.rgb /= output.a;
- background.rgb /= background.a;
-
- float4 retval = output;
-
- if(blendop == 12) {
- retval.rgb = SetLum(SetSat(output.rgb, Sat(background.rgb)), Lum(background.rgb));
- } else if(blendop == 13) {
- retval.rgb = SetLum(SetSat(background.rgb, Sat(output.rgb)), Lum(background.rgb));
- } else if(blendop == 14) {
- retval.rgb = SetLum(output.rgb, Lum(background.rgb));
- } else {
- retval.rgb = SetLum(background.rgb, Lum(output.rgb));
- }
-
- output.rgb = ((1 - background.a) * output.rgb + background.a * retval.rgb) * output.a;
- return output;
-}
-
-
-float4 SampleTexturePS( VS_OUTPUT In) : SV_Target
-{
- return tex.Sample(sSampler, In.TexCoord);
-}
-
-float4 SampleMaskTexturePS( VS_OUTPUT In) : SV_Target
-{
- return tex.Sample(sSampler, In.TexCoord) * mask.Sample(sMaskSampler, In.MaskTexCoord).a;
-}
-
-float4 SampleRadialGradientPS(VS_RADIAL_OUTPUT In, uniform sampler aSampler) : SV_Target
-{
- // Radial gradient painting is defined as the set of circles whose centers
- // are described by C(t) = (C2 - C1) * t + C1; with radii
- // R(t) = (R2 - R1) * t + R1; for R(t) > 0. This shader solves the
- // quadratic equation that arises when calculating t for pixel (x, y).
- //
- // A more extensive derrivation can be found in the pixman radial gradient
- // code.
-
- float2 p = In.PixelCoord;
- float3 dp = float3(p - center1, radius1);
-
- // dpx * dcx + dpy * dcy + r * dr
- float B = dot(dp, diff);
-
- float C = pow(dp.x, 2) + pow(dp.y, 2) - sq_radius1;
-
- float det = pow(B, 2) - A * C;
-
- if (det < 0) {
- return float4(0, 0, 0, 0);
- }
-
- float sqrt_det = sqrt(abs(det));
-
- float2 t = (B + float2(sqrt_det, -sqrt_det)) / A;
-
- float2 isValid = step(float2(-radius1, -radius1), t * diff.z);
-
- if (max(isValid.x, isValid.y) <= 0) {
- return float4(0, 0, 0, 0);
- }
-
- float upper_t = lerp(t.y, t.x, isValid.x);
-
- float4 output = tex.Sample(aSampler, float2(upper_t, 0.5));
- // Premultiply
- output.rgb *= output.a;
- // Multiply the output color by the input mask for the operation.
- output *= mask.Sample(sMaskSampler, In.MaskTexCoord).a;
- return output;
-};
-
-float4 SampleRadialGradientA0PS( VS_RADIAL_OUTPUT In, uniform sampler aSampler ) : SV_Target
-{
- // This simpler shader is used for the degenerate case where A is 0,
- // i.e. we're actually solving a linear equation.
-
- float2 p = In.PixelCoord;
- float3 dp = float3(p - center1, radius1);
-
- // dpx * dcx + dpy * dcy + r * dr
- float B = dot(dp, diff);
-
- float C = pow(dp.x, 2) + pow(dp.y, 2) - pow(radius1, 2);
-
- float t = 0.5 * C / B;
-
- if (-radius1 >= t * diff.z) {
- return float4(0, 0, 0, 0);
- }
-
- float4 output = tex.Sample(aSampler, float2(t, 0.5));
- // Premultiply
- output.rgb *= output.a;
- // Multiply the output color by the input mask for the operation.
- output *= mask.Sample(sMaskSampler, In.MaskTexCoord).a;
- return output;
-};
-
-float4 SampleConicGradientPS(VS_CONIC_OUTPUT In, uniform sampler aSampler) : SV_Target
-{
- float2 current_dir = In.PixelCoord - center;
- float current_angle = atan2(current_dir.y, current_dir.x) + (3.141592 / 2.0 - angle);
- float offset = fmod(current_angle / (2.0 * 3.141592), 1.0) - start_offset;
- offset = offset / (end_offset - start_offset);
-
- float upper_t = lerp(0, 1, offset);
-
- float4 output = tex.Sample(aSampler, float2(upper_t, 0.5));
- // Premultiply
- output.rgb *= output.a;
- // Multiply the output color by the input mask for the operation.
- output *= mask.Sample(sMaskSampler, In.MaskTexCoord).a;
- return output;
-};
-
-float4 SampleShadowHPS( VS_OUTPUT In) : SV_Target
-{
- float outputStrength = 0;
-
- outputStrength += BlurWeights[0].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].x, In.TexCoord.y)).a;
- outputStrength += BlurWeights[0].y * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].y, In.TexCoord.y)).a;
- outputStrength += BlurWeights[0].z * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].z, In.TexCoord.y)).a;
- outputStrength += BlurWeights[0].w * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].w, In.TexCoord.y)).a;
- outputStrength += BlurWeights[1].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[1].x, In.TexCoord.y)).a;
- outputStrength += BlurWeights[1].y * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[1].y, In.TexCoord.y)).a;
- outputStrength += BlurWeights[1].z * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[1].z, In.TexCoord.y)).a;
- outputStrength += BlurWeights[1].w * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[1].w, In.TexCoord.y)).a;
- outputStrength += BlurWeights[2].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[2].x, In.TexCoord.y)).a;
-
- return ShadowColor * outputStrength;
-};
-
-float4 SampleShadowVPS( VS_OUTPUT In) : SV_Target
-{
- float4 outputColor = float4(0, 0, 0, 0);
-
- outputColor += BlurWeights[0].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].x));
- outputColor += BlurWeights[0].y * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].y));
- outputColor += BlurWeights[0].z * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].z));
- outputColor += BlurWeights[0].w * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].w));
- outputColor += BlurWeights[1].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].x));
- outputColor += BlurWeights[1].y * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].y));
- outputColor += BlurWeights[1].z * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].z));
- outputColor += BlurWeights[1].w * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].w));
- outputColor += BlurWeights[2].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[2].x));
-
- return outputColor;
-};
-
-float4 SampleMaskShadowVPS( VS_OUTPUT In) : SV_Target
-{
- float4 outputColor = float4(0, 0, 0, 0);
-
- outputColor += BlurWeights[0].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].x));
- outputColor += BlurWeights[0].y * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].y));
- outputColor += BlurWeights[0].z * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].z));
- outputColor += BlurWeights[0].w * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[0].w));
- outputColor += BlurWeights[1].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].x));
- outputColor += BlurWeights[1].y * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].y));
- outputColor += BlurWeights[1].z * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].z));
- outputColor += BlurWeights[1].w * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[1].w));
- outputColor += BlurWeights[2].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x, In.TexCoord.y + BlurOffsetsV[2].x));
-
- return outputColor * mask.Sample(sMaskSampler, In.MaskTexCoord).a;
-};
-
-PS_TEXT_OUTPUT SampleTextTexturePS( VS_OUTPUT In) : SV_Target
-{
- PS_TEXT_OUTPUT output;
- output.color = float4(TextColor.r, TextColor.g, TextColor.b, 1.0);
- output.alpha.rgba = tex.Sample(sSampler, In.TexCoord).bgrg * TextColor.a;
- return output;
-};
-
-PS_TEXT_OUTPUT SampleTextTexturePSMasked( VS_OUTPUT In) : SV_Target
-{
- PS_TEXT_OUTPUT output;
-
- float maskValue = mask.Sample(sMaskSampler, In.MaskTexCoord).a;
-
- output.color = float4(TextColor.r, TextColor.g, TextColor.b, 1.0);
- output.alpha.rgba = tex.Sample(sSampler, In.TexCoord).bgrg * TextColor.a * maskValue;
-
- return output;
-};
-
-technique10 SampleTexture
-{
- pass P0
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleTexturePS()));
- }
-}
-
-technique10 SampleTextureForSeparableBlending_1
-{
- pass P0
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleBlendTextureSeparablePS_1()));
- }
-}
-
-technique10 SampleTextureForSeparableBlending_2
-{
- pass P0
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleBlendTextureSeparablePS_2()));
- }
-}
-
-technique10 SampleTextureForNonSeparableBlending
-{
- pass P0
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleBlendTextureNonSeparablePS()));
- }
-}
-
-technique10 SampleRadialGradient
-{
- pass APos
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientPS( sSampler )));
- }
- pass A0
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientA0PS( sSampler )));
- }
- pass APosWrap
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientPS( sWrapSampler )));
- }
- pass A0Wrap
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientA0PS( sWrapSampler )));
- }
- pass APosMirror
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientPS( sMirrorSampler )));
- }
- pass A0Mirror
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientA0PS( sMirrorSampler )));
- }
-}
-
-technique10 SampleConicGradient
-{
- pass APos
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleConicVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleConicGradientPS( sSampler )));
- }
- pass APosWrap
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleConicVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleConicGradientPS( sWrapSampler )));
- }
- pass APosMirror
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleConicVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleConicGradientPS( sMirrorSampler )));
- }
-}
-
-technique10 SampleMaskedTexture
-{
- pass P0
- {
- SetRasterizerState(TextureRast);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleMaskTexturePS()));
- }
-}
-
-technique10 SampleTextureWithShadow
-{
- // Horizontal pass
- pass P0
- {
- SetRasterizerState(TextureRast);
- SetBlendState(ShadowBlendH, float4(1.0f, 1.0f, 1.0f, 1.0f), 0xffffffff);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleShadowHPS()));
- }
- // Vertical pass
- pass P1
- {
- SetRasterizerState(TextureRast);
- SetBlendState(ShadowBlendV, float4(1.0f, 1.0f, 1.0f, 1.0f), 0xffffffff);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleShadowVPS()));
- }
- // Vertical pass - used when using a mask
- pass P2
- {
- SetRasterizerState(TextureRast);
- SetBlendState(ShadowBlendV, float4(1.0f, 1.0f, 1.0f, 1.0f), 0xffffffff);
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleMaskShadowVPS()));
- }
-}
-
-technique10 SampleTextTexture
-{
- pass Unmasked
- {
- SetRasterizerState(TextureRast);
- SetBlendState(bTextBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleTextTexturePS()));
- }
- pass Masked
- {
- SetRasterizerState(TextureRast);
- SetBlendState(bTextBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
- SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS()));
- SetGeometryShader(NULL);
- SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleTextTexturePSMasked()));
- }
-}
-
diff --git a/gfx/2d/ShadersD2D.h b/gfx/2d/ShadersD2D.h
@@ -1,10855 +0,0 @@
-#if 0
-//
-// FX Version: fx_4_0
-// Child effect (requires effect pool): false
-//
-// 5 local buffer(s)
-//
-cbuffer $Globals
-{
- uint blendop; // Offset: 0, size: 4
-}
-
-cbuffer cb0
-{
- float4 QuadDesc; // Offset: 0, size: 16
- float4 TexCoords; // Offset: 16, size: 16
- float4 MaskTexCoords; // Offset: 32, size: 16
- float4 TextColor; // Offset: 48, size: 16
-}
-
-cbuffer cb1
-{
- float4 BlurOffsetsH[3]; // Offset: 0, size: 48
- float4 BlurOffsetsV[3]; // Offset: 48, size: 48
- float4 BlurWeights[3]; // Offset: 96, size: 48
- float4 ShadowColor; // Offset: 144, size: 16
-}
-
-cbuffer cb2
-{
- float3x3 DeviceSpaceToUserSpace; // Offset: 0, size: 44
- float2 dimensions; // Offset: 48, size: 8
- float3 diff; // Offset: 64, size: 12
- float2 center1; // Offset: 80, size: 8
- float A; // Offset: 88, size: 4
- float radius1; // Offset: 92, size: 4
- float sq_radius1; // Offset: 96, size: 4
-}
-
-cbuffer cb3
-{
- float3x3 DeviceSpaceToUserSpace_cb3;// Offset: 0, size: 44
- float2 dimensions_cb3; // Offset: 48, size: 8
- float2 center; // Offset: 56, size: 8
- float angle; // Offset: 64, size: 4
- float start_offset; // Offset: 68, size: 4
- float end_offset; // Offset: 72, size: 4
-}
-
-//
-// 13 local object(s)
-//
-Texture2D tex;
-Texture2D bcktex;
-Texture2D mask;
-SamplerState sSampler
-{
- Filter = uint(MIN_MAG_MIP_LINEAR /* 21 */);
- Texture = tex;
- AddressU = uint(CLAMP /* 3 */);
- AddressV = uint(CLAMP /* 3 */);
-};
-SamplerState sBckSampler
-{
- Filter = uint(MIN_MAG_MIP_LINEAR /* 21 */);
- Texture = bcktex;
- AddressU = uint(CLAMP /* 3 */);
- AddressV = uint(CLAMP /* 3 */);
-};
-SamplerState sWrapSampler
-{
- Filter = uint(MIN_MAG_MIP_LINEAR /* 21 */);
- Texture = tex;
- AddressU = uint(WRAP /* 1 */);
- AddressV = uint(WRAP /* 1 */);
-};
-SamplerState sMirrorSampler
-{
- Filter = uint(MIN_MAG_MIP_LINEAR /* 21 */);
- Texture = tex;
- AddressU = uint(MIRROR /* 2 */);
- AddressV = uint(MIRROR /* 2 */);
-};
-SamplerState sMaskSampler
-{
- Filter = uint(MIN_MAG_MIP_LINEAR /* 21 */);
- Texture = mask;
- AddressU = uint(CLAMP /* 3 */);
- AddressV = uint(CLAMP /* 3 */);
-};
-SamplerState sShadowSampler
-{
- Filter = uint(MIN_MAG_MIP_LINEAR /* 21 */);
- Texture = tex;
- AddressU = uint(BORDER /* 4 */);
- AddressV = uint(BORDER /* 4 */);
- BorderColor = float4(0, 0, 0, 0);
-};
-RasterizerState TextureRast
-{
- ScissorEnable = bool(TRUE /* 1 */);
- CullMode = uint(NONE /* 1 */);
-};
-BlendState ShadowBlendH
-{
- BlendEnable[0] = bool(FALSE /* 0 */);
- RenderTargetWriteMask[0] = byte(0x0f);
-};
-BlendState ShadowBlendV
-{
- BlendEnable[0] = bool(TRUE /* 1 */);
- SrcBlend[0] = uint(ONE /* 2 */);
- DestBlend[0] = uint(INV_SRC_ALPHA /* 6 */);
- BlendOp[0] = uint(ADD /* 1 */);
- SrcBlendAlpha[0] = uint(ONE /* 2 */);
- DestBlendAlpha[0] = uint(INV_SRC_ALPHA /* 6 */);
- BlendOpAlpha[0] = uint(ADD /* 1 */);
- RenderTargetWriteMask[0] = byte(0x0f);
-};
-BlendState bTextBlend
-{
- AlphaToCoverageEnable = bool(FALSE /* 0 */);
- BlendEnable[0] = bool(TRUE /* 1 */);
- SrcBlend[0] = uint(SRC1_COLOR /* 16 */);
- DestBlend[0] = uint(INV_SRC1_COLOR /* 17 */);
- BlendOp[0] = uint(ADD /* 1 */);
- SrcBlendAlpha[0] = uint(SRC1_ALPHA /* 18 */);
- DestBlendAlpha[0] = uint(INV_SRC1_ALPHA /* 19 */);
- BlendOpAlpha[0] = uint(ADD /* 1 */);
- RenderTargetWriteMask[0] = byte(0x0f);
-};
-
-//
-// 9 technique(s)
-//
-technique10 SampleTexture
-{
- pass P0
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // tex texture float4 2d 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- dcl t0
- dcl_2d s0
- texld r0, t0, s0
- mov oC0, r0
-
- // approximately 2 instruction slots used (1 texture, 1 arithmetic)
- ps_4_0
- dcl_sampler s0, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_input_ps linear v1.xy
- dcl_output o0.xyzw
- sample o0.xyzw, v1.xyxx, t0.xyzw, s0
- ret
- // Approximately 2 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleTextureForSeparableBlending_1
-{
- pass P0
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer $Globals
- // {
- //
- // uint blendop; // Offset: 0 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sBckSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // bcktex texture float4 2d 1 1
- // $Globals cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 0 1 (UINT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c1, -1, -2, -3, -4
- def c2, 1, 0, 0.5, -2
- def c3, -5, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mov r0.w, c0.x
- add r0.x, r0.w, c3.x
- mul r0.x, r0.x, r0.x
- texld r1, t0, s1
- texld r2, t0, s0
- rcp r0.y, r2.w
- mad r3.xyz, r2, r0.y, -c2.x
- mul r3.xyz, r3, r3
- mad r4.xyz, r2, -r0.y, c2.x
- rcp r3.w, r4.x
- rcp r4.w, r1.w
- mul r5.xyz, r1, r4.w
- mad r1.xyz, r1, -r4.w, c2.z
- mul r3.w, r3.w, r5.x
- min r4.w, r3.w, c2.x
- cmp r4.w, -r3.x, c2.x, r4.w
- mul r6.xyz, r5, r5
- cmp r7.x, -r6.x, c2.y, r4.w
- rcp r4.w, r4.y
- mul r4.w, r4.w, r5.y
- min r5.w, r4.w, c2.x
- cmp r4.w, -r3.y, c2.x, r5.w
- cmp r7.y, -r6.y, c2.y, r4.w
- rcp r4.w, r4.z
- mul r4.w, r4.w, r5.z
- min r5.w, r4.w, c2.x
- cmp r4.w, -r3.z, c2.x, r5.w
- cmp r7.z, -r6.z, c2.y, r4.w
- mul r3.xyz, r0.y, r2
- mad r6.xyz, r2, r0.y, r5
- mad r6.xyz, r3, -r5, r6
- max r8.xyz, r3, r5
- cmp r0.xyz, -r0.x, r8, r7
- add r7, r0.w, c1
- mul r7, r7, r7
- min r8.xyz, r5, r3
- cmp r0.xyz, -r7.w, r8, r0
- mad r8.xyz, r5, -c2.w, -c2.x
- add r8.xyz, -r8, c2.x
- mad r4.xyz, r4, -r8, c2.x
- add r8.xyz, r5, r5
- mul r5.xyz, r5, r3
- mul r8.xyz, r3, r8
- cmp r1.xyz, r1, r8, r4
- cmp r0.xyz, -r7.z, r1, r0
- cmp r0.xyz, -r7.y, r6, r0
- cmp r0.xyz, -r7.x, r5, r0
- lrp r4.xyz, r1.w, r0, r3
- mul r4.w, r1.w, r1.w
- cmp r4.w, -r4.w, c2.x, c2.y
- mul r0.xyz, r2.w, r4
- mul r0.w, r2.w, r2.w
- cmp r0.w, -r0.w, c2.x, c2.y
- add r0.w, r4.w, r0.w
- cmp r2.xyz, -r0.w, r0, r2
- mov oC0, r2
-
- // approximately 56 instruction slots used (2 texture, 54 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[1], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_output o0.xyzw
- dcl_temps 7
- sample r0.xyzw, v1.xyxx, t0.xyzw, s0
- sample r1.xyzw, v1.xyxx, t1.xyzw, s1
- eq r2.x, r0.w, l(0.000000)
- eq r2.y, r1.w, l(0.000000)
- or r2.x, r2.y, r2.x
- if_nz r2.x
- mov o0.xyzw, r0.xyzw
- ret
- endif
- div r0.xyz, r0.xyzx, r0.wwww
- div r1.xyz, r1.xyzx, r1.wwww
- ieq r2.x, cb0[0].x, l(1)
- if_nz r2.x
- mul r2.xyz, r0.xyzx, r1.xyzx
- else
- ieq r2.w, cb0[0].x, l(2)
- if_nz r2.w
- add r3.xyz, r0.xyzx, r1.xyzx
- mad r2.xyz, -r0.xyzx, r1.xyzx, r3.xyzx
- else
- ieq r2.w, cb0[0].x, l(3)
- if_nz r2.w
- ge r3.xyz, l(0.500000, 0.500000, 0.500000, 0.000000), r1.xyzx
- add r4.xyz, r1.xyzx, r1.xyzx
- mul r4.xyz, r0.xyzx, r4.xyzx
- mad r5.xyz, r1.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
- add r6.xyz, -r0.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- add r5.xyz, -r5.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- mad r5.xyz, -r6.xyzx, r5.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- movc r2.xyz, r3.xyzx, r4.xyzx, r5.xyzx
- else
- ieq r2.w, cb0[0].x, l(4)
- if_nz r2.w
- min r2.xyz, r0.xyzx, r1.xyzx
- else
- ieq r2.w, cb0[0].x, l(5)
- if_nz r2.w
- max r2.xyz, r0.xyzx, r1.xyzx
- else
- eq r3.xyz, r1.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
- eq r4.xyz, r0.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- add r5.xyz, -r0.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- div r1.xyz, r1.xyzx, r5.xyzx
- min r1.xyz, r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- movc r1.xyz, r4.xyzx, l(1.000000,1.000000,1.000000,0), r1.xyzx
- movc r2.xyz, r3.xyzx, l(0,0,0,0), r1.xyzx
- endif
- endif
- endif
- endif
- endif
- add r1.x, -r1.w, l(1.000000)
- mul r1.yzw, r1.wwww, r2.xxyz
- mad r0.xyz, r1.xxxx, r0.xyzx, r1.yzwy
- mul o0.xyz, r0.wwww, r0.xyzx
- mov o0.w, r0.w
- ret
- // Approximately 57 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleTextureForSeparableBlending_2
-{
- pass P0
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer $Globals
- // {
- //
- // uint blendop; // Offset: 0 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sBckSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // bcktex texture float4 2d 1 1
- // $Globals cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 0 1 (UINT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c1, -7, -8, -9, -10
- def c2, 1, 0, -1, 0.25
- def c3, 0.5, 2, -1, 4
- def c4, 16, -12, 2, 1
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mov r0.w, c0.x
- add r0, r0.w, c1
- mul r0, r0, r0
- texld r1, t0, s0
- texld r2, t0, s1
- rcp r3.w, r2.w
- mad r3.xy, r2.yzzw, -r3.w, c2.w
- mul r4.xyz, r2, r3.w
- mad r5.xyz, r4, c4.x, c4.y
- mad r5.xyz, r5, r4, c3.w
- mul r5.xyz, r4, r5
- rsq r4.w, r4.y
- rcp r4.w, r4.w
- cmp r4.w, r3.x, r5.y, r4.w
- mad r4.w, r2.y, -r3.w, r4.w
- rcp r3.x, r1.w
- mul r6.xyz, r1, r3.x
- mad r7.xyz, r6, c3.y, c3.z
- mad r4.w, r7.y, r4.w, r4.y
- mad r8.xyz, r1, -r3.x, c3.x
- mad r9, r2.xyzx, -r3.w, c2.xxxw
- mad r10.xyz, r6, -c4.z, c4.w
- mul r10.xyz, r4, r10
- mad r10.xyz, r10, -r9, r4
- cmp r11.y, r8.y, r10.y, r4.w
- rsq r4.w, r4.z
- rcp r4.w, r4.w
- cmp r4.w, r3.y, r5.z, r4.w
- mad r4.w, r2.z, -r3.w, r4.w
- mad r4.w, r7.z, r4.w, r4.z
- cmp r11.z, r8.z, r10.z, r4.w
- rsq r4.w, r4.x
- rcp r4.w, r4.w
- cmp r4.w, r9.w, r5.x, r4.w
- mad r4.w, r2.x, -r3.w, r4.w
- mad r2.xyz, r2, r3.w, c2.z
- mul r2.xyz, r2, r2
- mad r4.w, r7.x, r4.w, r4.x
- add r3.yzw, -r7.xxyz, c2.x
- mad r3.yzw, r9.xxyz, -r3, c2.x
- cmp r11.x, r8.x, r10.x, r4.w
- mad r5.xyz, r1, r3.x, -r4
- mad r7.xyz, r1, r3.x, r4
- abs r5.xyz, r5
- mul r10.xyz, r4, r6
- mad r7.xyz, r10, -c3.y, r7
- cmp r5.xyz, -r0.w, r5, r7
- cmp r5.xyz, -r0.z, r11, r5
- add r7.xyz, r6, r6
- mul r4.xyz, r4, r7
- cmp r3.xyz, r8, r4, r3.yzww
- cmp r0.yzw, -r0.y, r3.xxyz, r5.xxyz
- rcp r6.w, r6.x
- mad r6.w, r9.x, -r6.w, c2.x
- max r3.x, r6.w, c2.y
- mul r3.yzw, r6.xxyz, r6.xxyz
- cmp r6.w, -r3.y, c2.y, r3.x
- cmp r4.x, -r2.x, c2.x, r6.w
- rcp r4.w, r6.y
- mad r4.w, r9.y, -r4.w, c2.x
- max r6.w, r4.w, c2.y
- cmp r4.w, -r3.z, c2.y, r6.w
- cmp r4.y, -r2.y, c2.x, r4.w
- rcp r4.w, r6.z
- mad r4.w, r9.z, -r4.w, c2.x
- max r6.w, r4.w, c2.y
- cmp r4.w, -r3.w, c2.y, r6.w
- cmp r4.z, -r2.z, c2.x, r4.w
- cmp r0.xyz, -r0.x, r4, r0.yzww
- lrp r3.xyz, r2.w, r0, r6
- mul r3.w, r2.w, r2.w
- cmp r3.w, -r3.w, c2.x, c2.y
- mul r0.xyz, r1.w, r3
- mul r0.w, r1.w, r1.w
- cmp r0.w, -r0.w, c2.x, c2.y
- add r0.w, r3.w, r0.w
- cmp r1.xyz, -r0.w, r0, r1
- mov oC0, r1
-
- // approximately 78 instruction slots used (2 texture, 76 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[1], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_output o0.xyzw
- dcl_temps 7
- sample r0.xyzw, v1.xyxx, t0.xyzw, s0
- sample r1.xyzw, v1.xyxx, t1.xyzw, s1
- eq r2.x, r0.w, l(0.000000)
- eq r2.y, r1.w, l(0.000000)
- or r2.x, r2.y, r2.x
- if_nz r2.x
- mov o0.xyzw, r0.xyzw
- ret
- endif
- div r0.xyz, r0.xyzx, r0.wwww
- div r1.xyz, r1.xyzx, r1.wwww
- ieq r2.x, cb0[0].x, l(7)
- if_nz r2.x
- eq r2.xyz, r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- eq r3.xyz, r0.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
- add r4.xyz, -r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- div r4.xyz, r4.xyzx, r0.xyzx
- min r4.xyz, r4.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- add r4.xyz, -r4.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- movc r3.xyz, r3.xyzx, l(0,0,0,0), r4.xyzx
- movc r2.xyz, r2.xyzx, l(1.000000,1.000000,1.000000,0), r3.xyzx
- else
- ieq r2.w, cb0[0].x, l(8)
- if_nz r2.w
- ge r3.xyz, l(0.500000, 0.500000, 0.500000, 0.000000), r0.xyzx
- add r4.xyz, r0.xyzx, r0.xyzx
- mul r4.xyz, r1.xyzx, r4.xyzx
- mad r5.xyz, r0.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
- add r6.xyz, -r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- add r5.xyz, -r5.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- mad r5.xyz, -r6.xyzx, r5.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- movc r2.xyz, r3.xyzx, r4.xyzx, r5.xyzx
- else
- ieq r2.w, cb0[0].x, l(9)
- if_nz r2.w
- ge r3.xyz, l(0.250000, 0.250000, 0.250000, 0.000000), r1.xyzx
- mad r4.xyz, r1.xyzx, l(16.000000, 16.000000, 16.000000, 0.000000), l(-12.000000, -12.000000, -12.000000, 0.000000)
- mad r4.xyz, r4.xyzx, r1.xyzx, l(4.000000, 4.000000, 4.000000, 0.000000)
- mul r4.xyz, r1.xyzx, r4.xyzx
- sqrt r5.xyz, r1.xyzx
- movc r3.xyz, r3.xyzx, r4.xyzx, r5.xyzx
- ge r4.xyz, l(0.500000, 0.500000, 0.500000, 0.000000), r0.xyzx
- mad r5.xyz, -r0.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(1.000000, 1.000000, 1.000000, 0.000000)
- mul r5.xyz, r1.xyzx, r5.xyzx
- add r6.xyz, -r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
- mad r5.xyz, -r5.xyzx, r6.xyzx, r1.xyzx
- mad r6.xyz, r0.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
- add r3.xyz, -r1.xyzx, r3.xyzx
- mad r3.xyz, r6.xyzx, r3.xyzx, r1.xyzx
- movc r2.xyz, r4.xyzx, r5.xyzx, r3.xyzx
- else
- ieq r2.w, cb0[0].x, l(10)
- add r3.xyz, r0.xyzx, -r1.xyzx
- add r4.xyz, r0.xyzx, r1.xyzx
- mul r1.xyz, r0.xyzx, r1.xyzx
- mad r1.xyz, -r1.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), r4.xyzx
- movc r2.xyz, r2.wwww, |r3.xyzx|, r1.xyzx
- endif
- endif
- endif
- add r1.x, -r1.w, l(1.000000)
- mul r1.yzw, r1.wwww, r2.xxyz
- mad r0.xyz, r1.xxxx, r0.xyzx, r1.yzwy
- mul o0.xyz, r0.wwww, r0.xyzx
- mov o0.w, r0.w
- ret
- // Approximately 66 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleTextureForNonSeparableBlending
-{
- pass P0
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer $Globals
- // {
- //
- // uint blendop; // Offset: 0 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sBckSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // bcktex texture float4 2d 1 1
- // $Globals cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 0 1 (UINT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c1, -12, -13, -14, 0
- def c2, 1, 0, 0, 0
- def c3, 0.300000012, 0.589999974, 0.109999999, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mov r0.y, c2.y
- mov r1.y, c2.y
- mov r2.z, c2.y
- texld r3, t0, s1
- texld r4, t0, s0
- rcp r0.w, r4.w
- mul r5.xyz, r0.w, r4
- mad r6.xy, r4.yxzw, r0.w, -r5.zyzw
- cmp r7.xy, r6.x, r5.yzzw, r5.zyzw
- max r1.w, r5.x, r7.x
- min r2.w, r7.y, r5.x
- add r7.w, r1.w, -r2.w
- rcp r1.w, r3.w
- mul r8.xyz, r1.w, r3
- mad r9.xy, r3.x, r1.w, -r8.zyzw
- rcp r2.w, r9.y
- mul r2.w, r2.w, r7.w
- mad r10, r3.zyyz, r1.w, -r8.xxzy
- mul r7.y, r2.w, r10.w
- mov r9.zw, r10
- cmp r1.xz, -r9.y, r9.yyww, r7.wyyw
- rcp r2.w, r9.x
- mul r2.w, r2.w, r7.w
- mul r7.x, r2.w, r9.z
- cmp r2.xy, -r9.x, r9.xzzw, r7.wxzw
- cmp r1.xyz, r9.w, r1, r2
- rcp r5.w, r9.w
- mul r5.w, r5.w, r7.w
- mul r7.z, r5.w, r9.y
- cmp r0.xz, -r10.w, r9.yyww, r7.zyww
- cmp r0.xyz, r10.x, r0, r1
- mov r1.x, c2.y
- mov r2.x, c2.y
- mov r11.z, c2.y
- rcp r2.w, r9.z
- mul r2.w, r2.w, r7.w
- mul r7.x, r2.w, r9.x
- cmp r11.xy, -r10.z, r9.xzzw, r7.xwzw
- rcp r2.w, r10.y
- mul r2.w, r2.w, r7.w
- mul r7.y, r2.w, r10.x
- cmp r2.yz, -r10.y, r10.xyxw, r7.xwyw
- cmp r2.xyz, r10.x, r2, r11
- rcp r2.w, r10.x
- mul r2.w, r2.w, r7.w
- mul r7.z, r2.w, r10.y
- cmp r1.yz, -r10.x, r10.xyxw, r7.xzww
- cmp r1.xyz, r9.w, r1, r2
- cmp r0.xyz, r10.y, r1, r0
- cmp r1.xy, r9.z, r8.yzzw, r8.zyzw
- dp3 r5.w, r0, c3
- dp3 r1.z, r8, c3
- add r5.w, -r5.w, r1.z
- add r0.xyz, r0, r5.w
- add r5.w, -r0.y, r0.x
- cmp r2.xy, r5.w, r0.yxzw, r0
- min r5.w, r0.z, r2.x
- max r7.x, r2.y, r0.z
- dp3 r2.x, r0, c3
- add r2.y, -r5.w, r2.x
- rcp r2.y, r2.y
- add r7.yzw, r0.xxyz, -r2.x
- mul r7.yzw, r2.x, r7
- mad r2.yzw, r7, r2.y, r2.x
- cmp r0.xyz, r5.w, r0, r2.yzww
- add r2.yzw, -r2.x, r0.xxyz
- add r5.w, -r2.x, c2.x
- mul r2.yzw, r2, r5.w
- add r5.w, -r2.x, r7.x
- add r7.x, -r7.x, c2.x
- rcp r5.w, r5.w
- mad r2.xyz, r2.yzww, r5.w, r2.x
- cmp r0.xyz, r7.x, r0, r2
- dp3 r5.w, r5, c3
- add r2.x, r1.z, -r5.w
- add r5.w, -r1.z, r5.w
- mad r2.yzw, r3.xxyz, r1.w, r5.w
- mad r3.xyz, r4, r0.w, r2.x
- mad r7, r4.zyzx, r0.w, -r5.xxyz
- add r0.w, -r3.y, r3.x
- cmp r8.yz, r0.w, r3.xyxw, r3.xxyw
- min r0.w, r3.z, r8.y
- max r1.w, r8.z, r3.z
- dp3 r5.w, r3, c3
- add r2.x, -r0.w, r5.w
- rcp r2.x, r2.x
- add r8.yzw, r3.xxyz, -r5.w
- mul r8.yzw, r5.w, r8
- mad r8.yzw, r8, r2.x, r5.w
- cmp r3.xyz, r0.w, r3, r8.yzww
- add r8.yzw, -r5.w, r3.xxyz
- add r0.w, -r5.w, c2.x
- mul r8.yzw, r0.w, r8
- add r0.w, r1.w, -r5.w
- add r1.w, -r1.w, c2.x
- rcp r0.w, r0.w
- mad r8.yzw, r8, r0.w, r5.w
- cmp r3.xyz, r1.w, r3, r8.yzww
- add r0.w, -r2.z, r2.y
- cmp r8.yz, r0.w, r2.xzyw, r2
- min r0.w, r2.w, r8.y
- max r1.w, r8.z, r2.w
- dp3 r5.w, r2.yzww, c3
- add r2.x, -r0.w, r5.w
- rcp r2.x, r2.x
- add r8.yzw, r2, -r5.w
- mul r8.yzw, r5.w, r8
- mad r8.yzw, r8, r2.x, r5.w
- cmp r2.xyz, r0.w, r2.yzww, r8.yzww
- add r8.yzw, -r5.w, r2.xxyz
- add r0.w, -r5.w, c2.x
- mul r8.yzw, r0.w, r8
- add r0.w, r1.w, -r5.w
- add r1.w, -r1.w, c2.x
- rcp r0.w, r0.w
- mad r8.yzw, r8, r0.w, r5.w
- cmp r2.xyz, r1.w, r2, r8.yzww
- mov r0.w, c0.x
- add r8.yzw, r0.w, c1.xxyz
- mul r8.yzw, r8, r8
- cmp r2.xyz, -r8.w, r3, r2
- cmp r0.xyz, -r8.z, r0, r2
- mov r2.y, c2.y
- mov r3.y, c2.y
- mov r9.z, c2.y
- max r0.w, r8.x, r1.x
- min r2.w, r1.y, r8.x
- add r10.w, r0.w, -r2.w
- rcp r0.w, r7.w
- mul r0.w, r0.w, r10.w
- mul r10.x, r0.w, r6.x
- mov r6.zw, r7.xywz
- cmp r9.xy, -r7.w, r6.zxzw, r10.wxzw
- rcp r0.w, r6.y
- mul r0.w, r0.w, r10.w
- mul r10.y, r0.w, r7.z
- cmp r3.xz, -r6.y, r6.yyww, r10.wyyw
- cmp r1.xyw, r7.z, r3.xyzz, r9.xyzz
- rcp r0.w, r7.z
- mul r0.w, r0.w, r10.w
- mul r10.z, r0.w, r6.y
- cmp r2.xz, -r7.z, r6.yyww, r10.zyww
- cmp r1.xyw, r7.x, r2.xyzz, r1
- mov r2.x, c2.y
- mov r3.z, c2.y
- rcp r0.w, r6.x
- mul r0.w, r0.w, r10.w
- mul r10.x, r0.w, r7.w
- cmp r3.xy, -r6.x, r6.zxzw, r10.xwzw
- rcp r0.w, r7.y
- mul r0.w, r0.w, r10.w
- mul r10.y, r0.w, r7.x
- cmp r2.yz, -r7.y, r7.xyxw, r10.xwyw
- cmp r2.xyz, r7.x, r2, r3
- mov r3.x, c2.y
- rcp r0.w, r7.x
- mul r0.w, r0.w, r10.w
- mul r10.z, r0.w, r7.y
- cmp r3.yz, -r7.x, r7.xyxw, r10.xzww
- cmp r2.xyz, r7.z, r3, r2
- cmp r1.xyw, r7.y, r2.xyzz, r1
- dp3 r0.w, r1.xyww, c3
- add r0.w, -r0.w, r1.z
- add r1.xyz, r0.w, r1.xyww
- add r0.w, -r1.y, r1.x
- cmp r2.xy, r0.w, r1.yxzw, r1
- min r0.w, r1.z, r2.x
- max r5.w, r2.y, r1.z
- dp3 r1.w, r1, c3
- add r2.xyz, -r1.w, r1
- mul r2.xyz, r1.w, r2
- add r2.w, -r0.w, r1.w
- rcp r2.w, r2.w
- mad r2.xyz, r2, r2.w, r1.w
- cmp r1.xyz, r0.w, r1, r2
- add r2.xyz, -r1.w, r1
- add r0.w, -r1.w, c2.x
- mul r2.xyz, r0.w, r2
- add r0.w, -r1.w, r5.w
- add r2.w, -r5.w, c2.x
- rcp r0.w, r0.w
- mad r2.xyz, r2, r0.w, r1.w
- cmp r1.xyz, r2.w, r1, r2
- cmp r0.xyz, -r8.y, r1, r0
- lrp r1.xyz, r3.w, r0, r5
- mul r1.w, r3.w, r3.w
- cmp r1.w, -r1.w, c2.x, c2.y
- mul r0.xyz, r4.w, r1
- mul r0.w, r4.w, r4.w
- cmp r0.w, -r0.w, c2.x, c2.y
- add r0.w, r1.w, r0.w
- cmp r4.xyz, -r0.w, r0, r4
- mov oC0, r4
-
- // approximately 193 instruction slots used (2 texture, 191 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[1], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_output o0.xyzw
- dcl_temps 9
- sample r0.xyzw, v1.xyxx, t0.xyzw, s0
- sample r1.xyzw, v1.xyxx, t1.xyzw, s1
- eq r2.x, r0.w, l(0.000000)
- eq r2.y, r1.w, l(0.000000)
- or r2.x, r2.y, r2.x
- if_nz r2.x
- mov o0.xyzw, r0.xyzw
- ret
- endif
- div r0.xyz, r0.xyzx, r0.wwww
- div r1.xyz, r1.xyzx, r1.wwww
- ieq r2.x, cb0[0].x, l(12)
- if_nz r2.x
- max r2.x, r1.z, r1.y
- max r2.x, r1.x, r2.x
- min r2.y, r1.z, r1.y
- min r2.y, r1.x, r2.y
- add r2.w, -r2.y, r2.x
- ge r3.x, r0.y, r0.x
- if_nz r3.x
- add r3.xyzw, -r0.xxzz, r0.yzxy
- lt r4.xyz, l(0.000000, 0.000000, 0.000000, 0.000000), r3.yxwy
- div r5.xyz, r2.wwww, r3.yxwy
- mul r2.xyz, r3.xyzx, r5.xyzx
- movc r5.yz, r4.xxxx, r2.xxwx, r3.xxyx
- ge r4.xw, r0.zzzz, r0.yyyx
- movc r6.yz, r4.yyyy, r2.wwyw, r3.xxyx
- movc r3.xy, r4.zzzz, r2.zwzz, r3.zwzz
- mov r6.x, l(0)
- mov r3.z, l(0)
- movc r3.xyz, r4.wwww, r6.xyzx, r3.xyzx
- mov r5.x, l(0)
- movc r3.xyz, r4.xxxx, r5.xyzx, r3.xyzx
- else
- add r4.xyzw, -r0.yyzz, r0.xzyx
- lt r5.xyz, l(0.000000, 0.000000, 0.000000, 0.000000), r4.yxwy
- div r6.xyz, r2.wwww, r4.yxwy
- mul r2.xyz, r4.xyzx, r6.xyzx
- movc r6.xz, r5.xxxx, r2.xxwx, r4.xxyx
- ge r5.xw, r0.zzzz, r0.xxxy
- movc r7.xz, r5.yyyy, r2.wwyw, r4.xxyx
- movc r2.xy, r5.zzzz, r2.wzww, r4.wzww
- mov r7.y, l(0)
- mov r2.z, l(0)
- movc r2.xyz, r5.wwww, r7.xyzx, r2.xyzx
- mov r6.y, l(0)
- movc r3.xyz, r5.xxxx, r6.xyzx, r2.xyzx
- endif
- dp3 r2.x, r1.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- dp3 r2.y, r3.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- add r2.x, -r2.y, r2.x
- add r2.xyz, r2.xxxx, r3.xyzx
- dp3 r2.w, r2.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- min r3.x, r2.y, r2.x
- min r3.x, r2.z, r3.x
- max r3.y, r2.y, r2.x
- max r3.y, r2.z, r3.y
- lt r3.z, r3.x, l(0.000000)
- add r4.xyz, -r2.wwww, r2.xyzx
- mul r4.xyz, r2.wwww, r4.xyzx
- add r3.x, r2.w, -r3.x
- div r4.xyz, r4.xyzx, r3.xxxx
- add r4.xyz, r2.wwww, r4.xyzx
- movc r2.xyz, r3.zzzz, r4.xyzx, r2.xyzx
- lt r3.x, l(1.000000), r3.y
- add r4.xyz, -r2.wwww, r2.xyzx
- add r3.z, -r2.w, l(1.000000)
- mul r4.xyz, r3.zzzz, r4.xyzx
- add r3.y, -r2.w, r3.y
- div r3.yzw, r4.xxyz, r3.yyyy
- add r3.yzw, r2.wwww, r3.yyzw
- movc r2.xyz, r3.xxxx, r3.yzwy, r2.xyzx
- else
- ieq r2.w, cb0[0].x, l(13)
- if_nz r2.w
- max r2.w, r0.z, r0.y
- max r2.w, r0.x, r2.w
- min r3.x, r0.z, r0.y
- min r3.x, r0.x, r3.x
- add r3.w, r2.w, -r3.x
- ge r2.w, r1.y, r1.x
- if_nz r2.w
- add r4.xyzw, -r1.xxzz, r1.yzxy
- lt r5.xyz, l(0.000000, 0.000000, 0.000000, 0.000000), r4.yxwy
- div r6.xyz, r3.wwww, r4.yxwy
- mul r3.xyz, r4.xyzx, r6.xyzx
- movc r6.yz, r5.xxxx, r3.xxwx, r4.xxyx
- ge r5.xw, r1.zzzz, r1.yyyx
- movc r7.yz, r5.yyyy, r3.wwyw, r4.xxyx
- movc r4.xy, r5.zzzz, r3.zwzz, r4.zwzz
- mov r7.x, l(0)
- mov r4.z, l(0)
- movc r4.xyz, r5.wwww, r7.xyzx, r4.xyzx
- mov r6.x, l(0)
- movc r4.xyz, r5.xxxx, r6.xyzx, r4.xyzx
- else
- add r5.xyzw, -r1.yyzz, r1.xzyx
- lt r6.xyz, l(0.000000, 0.000000, 0.000000, 0.000000), r5.yxwy
- div r7.xyz, r3.wwww, r5.yxwy
- mul r3.xyz, r5.xyzx, r7.xyzx
- movc r7.xz, r6.xxxx, r3.xxwx, r5.xxyx
- ge r6.xw, r1.zzzz, r1.xxxy
- movc r8.xz, r6.yyyy, r3.wwyw, r5.xxyx
- movc r3.xy, r6.zzzz, r3.wzww, r5.wzww
- mov r8.y, l(0)
- mov r3.z, l(0)
- movc r3.xyz, r6.wwww, r8.xyzx, r3.xyzx
- mov r7.y, l(0)
- movc r4.xyz, r6.xxxx, r7.xyzx, r3.xyzx
- endif
- dp3 r2.w, r1.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- dp3 r3.x, r4.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- add r2.w, r2.w, -r3.x
- add r3.xyz, r2.wwww, r4.xyzx
- dp3 r2.w, r3.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- min r3.w, r3.y, r3.x
- min r3.w, r3.z, r3.w
- max r4.x, r3.y, r3.x
- max r4.x, r3.z, r4.x
- lt r4.y, r3.w, l(0.000000)
- add r5.xyz, -r2.wwww, r3.xyzx
- mul r5.xyz, r2.wwww, r5.xyzx
- add r3.w, r2.w, -r3.w
- div r5.xyz, r5.xyzx, r3.wwww
- add r5.xyz, r2.wwww, r5.xyzx
- movc r3.xyz, r4.yyyy, r5.xyzx, r3.xyzx
- lt r3.w, l(1.000000), r4.x
- add r4.yzw, -r2.wwww, r3.xxyz
- add r5.x, -r2.w, l(1.000000)
- mul r4.yzw, r4.yyzw, r5.xxxx
- add r4.x, -r2.w, r4.x
- div r4.xyz, r4.yzwy, r4.xxxx
- add r4.xyz, r2.wwww, r4.xyzx
- movc r2.xyz, r3.wwww, r4.xyzx, r3.xyzx
- else
- ieq r2.w, cb0[0].x, l(14)
- if_nz r2.w
- dp3 r2.w, r1.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- dp3 r3.x, r0.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- add r2.w, r2.w, -r3.x
- add r3.xyz, r0.xyzx, r2.wwww
- dp3 r2.w, r3.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- min r3.w, r3.y, r3.x
- min r3.w, r3.z, r3.w
- max r4.x, r3.y, r3.x
- max r4.x, r3.z, r4.x
- lt r4.y, r3.w, l(0.000000)
- add r5.xyz, -r2.wwww, r3.xyzx
- mul r5.xyz, r2.wwww, r5.xyzx
- add r3.w, r2.w, -r3.w
- div r5.xyz, r5.xyzx, r3.wwww
- add r5.xyz, r2.wwww, r5.xyzx
- movc r3.xyz, r4.yyyy, r5.xyzx, r3.xyzx
- lt r3.w, l(1.000000), r4.x
- add r4.yzw, -r2.wwww, r3.xxyz
- add r5.x, -r2.w, l(1.000000)
- mul r4.yzw, r4.yyzw, r5.xxxx
- add r4.x, -r2.w, r4.x
- div r4.xyz, r4.yzwy, r4.xxxx
- add r4.xyz, r2.wwww, r4.xyzx
- movc r2.xyz, r3.wwww, r4.xyzx, r3.xyzx
- else
- dp3 r2.w, r0.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- dp3 r3.x, r1.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- add r2.w, r2.w, -r3.x
- add r1.xyz, r1.xyzx, r2.wwww
- dp3 r2.w, r1.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
- min r3.x, r1.y, r1.x
- min r3.x, r1.z, r3.x
- max r3.y, r1.y, r1.x
- max r3.y, r1.z, r3.y
- lt r3.z, r3.x, l(0.000000)
- add r4.xyz, r1.xyzx, -r2.wwww
- mul r4.xyz, r2.wwww, r4.xyzx
- add r3.x, r2.w, -r3.x
- div r4.xyz, r4.xyzx, r3.xxxx
- add r4.xyz, r2.wwww, r4.xyzx
- movc r1.xyz, r3.zzzz, r4.xyzx, r1.xyzx
- lt r3.x, l(1.000000), r3.y
- add r4.xyz, -r2.wwww, r1.xyzx
- add r3.z, -r2.w, l(1.000000)
- mul r4.xyz, r3.zzzz, r4.xyzx
- add r3.y, -r2.w, r3.y
- div r3.yzw, r4.xxyz, r3.yyyy
- add r3.yzw, r2.wwww, r3.yyzw
- movc r2.xyz, r3.xxxx, r3.yzwy, r1.xyzx
- endif
- endif
- endif
- add r1.x, -r1.w, l(1.000000)
- mul r1.yzw, r1.wwww, r2.xxyz
- mad r0.xyz, r1.xxxx, r0.xyzx, r1.yzwy
- mul o0.xyz, r0.wwww, r0.xyzx
- mov o0.w, r0.w
- ret
- // Approximately 195 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleRadialGradient
-{
- pass APos
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44
- // float2 dimensions; // Offset: 48 Size: 8
- // float3 diff; // Offset: 64 Size: 12 [unused]
- // float2 center1; // Offset: 80 Size: 8 [unused]
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4 [unused]
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb2 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused]
- // float2 dimensions; // Offset: 48 Size: 8 [unused]
- // float3 diff; // Offset: 64 Size: 12
- // float2 center1; // Offset: 80 Size: 8
- // float A; // Offset: 88 Size: 4
- // float radius1; // Offset: 92 Size: 4
- // float sq_radius1; // Offset: 96 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb2 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 4 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c3, 0.5, 0, 0, 0
- def c4, 1, -1, 0, -0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- add r0.xy, t0.wzzw, -c1
- dp2add r0.w, r0, r0, -c2.x
- mul r0.w, r0.w, c1.z
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- mad r0.y, r0.x, r0.x, -r0.w
- abs r0.z, r0.y
- rsq r0.z, r0.z
- rcp r1.x, r0.z
- mov r1.yz, -r1.x
- add r0.xzw, r0.x, r1.xyyz
- rcp r1.x, c1.z
- mul r0.xzw, r0, r1.x
- mov r1.w, c1.w
- mad r1.xyz, r0.xzww, c0.z, r1.w
- cmp r2.x, r1.x, r0.x, r0.w
- cmp r0.xzw, r1.xyyz, c4.xyxy, c4.zyzw
- mov r2.y, c3.x
- texld r1, t0, s1
- texld r2, r2, s0
- mul r2.xyz, r2.w, r2
- mul r1, r1.w, r2
- add r0.w, r0.w, r0.x
- cmp r0.x, r0.w, r0.x, r0.z
- cmp r1, -r0.x, c4.z, r1
- cmp r0, r0.y, r1, c4.z
- mov oC0, r0
-
- // approximately 28 instruction slots used (2 texture, 26 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[7], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 3
- add r0.xy, v1.zwzz, -cb0[5].xyxx
- mov r0.z, cb0[5].w
- dp3 r0.z, r0.xyzx, cb0[4].xyzx
- dp2 r0.x, r0.xyxx, r0.xyxx
- add r0.x, r0.x, -cb0[6].x
- mul r0.x, r0.x, cb0[5].z
- mad r0.x, r0.z, r0.z, -r0.x
- lt r0.y, r0.x, l(0.000000)
- sqrt r1.x, |r0.x|
- mov r1.y, -r1.x
- add r0.xz, r0.zzzz, r1.xxyx
- div r0.xz, r0.xxzx, cb0[5].zzzz
- mul r1.xy, r0.xzxx, cb0[4].zzzz
- ge r1.xy, r1.xyxx, -cb0[5].wwww
- and r1.xy, r1.xyxx, l(0x3f800000, 0x3f800000, 0, 0)
- add r0.x, -r0.z, r0.x
- mad r2.x, r1.x, r0.x, r0.z
- mov r2.y, l(0.500000)
- sample r2.xyzw, r2.xyxx, t0.xyzw, s0
- if_nz r0.y
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- max r0.x, r1.y, r1.x
- ge r0.x, l(0.000000), r0.x
- if_nz r0.x
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- mul r2.xyz, r2.wwww, r2.xyzx
- sample r0.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.wwww, r2.xyzw
- ret
- // Approximately 33 instruction slots used
-
- };
- }
-
- pass A0
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44
- // float2 dimensions; // Offset: 48 Size: 8
- // float3 diff; // Offset: 64 Size: 12 [unused]
- // float2 center1; // Offset: 80 Size: 8 [unused]
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4 [unused]
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb2 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused]
- // float2 dimensions; // Offset: 48 Size: 8 [unused]
- // float3 diff; // Offset: 64 Size: 12
- // float2 center1; // Offset: 80 Size: 8
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb2 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 4 2 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c2, 0.5, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mul r0.w, c1.w, c1.w
- add r0.xy, t0.wzzw, -c1
- dp2add r0.w, r0, r0, -r0.w
- mul r0.w, r0.w, c2.x
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- rcp r0.x, r0.x
- mul r0.x, r0.x, r0.w
- mov r0.y, c2.x
- texld r1, t0, s1
- texld r2, r0, s0
- mov r0.w, c1.w
- mad r0.x, r0.x, -c0.z, -r0.w
- mul r2.xyz, r2.w, r2
- mul r1, r1.w, r2
- cmp r0, r0.x, c2.y, r1
- mov oC0, r0
-
- // approximately 18 instruction slots used (2 texture, 16 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[6], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 2
- add r0.xy, v1.zwzz, -cb0[5].xyxx
- mov r0.z, cb0[5].w
- dp3 r0.z, r0.xyzx, cb0[4].xyzx
- dp2 r0.x, r0.xyxx, r0.xyxx
- mad r0.x, -cb0[5].w, cb0[5].w, r0.x
- mul r0.x, r0.x, l(0.500000)
- div r0.x, r0.x, r0.z
- mul r0.z, r0.x, cb0[4].z
- ge r0.z, -cb0[5].w, r0.z
- mov r0.y, l(0.500000)
- sample r1.xyzw, r0.xyxx, t0.xyzw, s0
- if_nz r0.z
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- mul r1.xyz, r1.wwww, r1.xyzx
- sample r0.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.wwww, r1.xyzw
- ret
- // Approximately 19 instruction slots used
-
- };
- }
-
- pass APosWrap
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44
- // float2 dimensions; // Offset: 48 Size: 8
- // float3 diff; // Offset: 64 Size: 12 [unused]
- // float2 center1; // Offset: 80 Size: 8 [unused]
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4 [unused]
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb2 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused]
- // float2 dimensions; // Offset: 48 Size: 8 [unused]
- // float3 diff; // Offset: 64 Size: 12
- // float2 center1; // Offset: 80 Size: 8
- // float A; // Offset: 88 Size: 4
- // float radius1; // Offset: 92 Size: 4
- // float sq_radius1; // Offset: 96 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sWrapSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb2 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 4 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c3, 0.5, 0, 0, 0
- def c4, 1, -1, 0, -0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- add r0.xy, t0.wzzw, -c1
- dp2add r0.w, r0, r0, -c2.x
- mul r0.w, r0.w, c1.z
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- mad r0.y, r0.x, r0.x, -r0.w
- abs r0.z, r0.y
- rsq r0.z, r0.z
- rcp r1.x, r0.z
- mov r1.yz, -r1.x
- add r0.xzw, r0.x, r1.xyyz
- rcp r1.x, c1.z
- mul r0.xzw, r0, r1.x
- mov r1.w, c1.w
- mad r1.xyz, r0.xzww, c0.z, r1.w
- cmp r2.x, r1.x, r0.x, r0.w
- cmp r0.xzw, r1.xyyz, c4.xyxy, c4.zyzw
- mov r2.y, c3.x
- texld r1, t0, s1
- texld r2, r2, s0
- mul r2.xyz, r2.w, r2
- mul r1, r1.w, r2
- add r0.w, r0.w, r0.x
- cmp r0.x, r0.w, r0.x, r0.z
- cmp r1, -r0.x, c4.z, r1
- cmp r0, r0.y, r1, c4.z
- mov oC0, r0
-
- // approximately 28 instruction slots used (2 texture, 26 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[7], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 3
- add r0.xy, v1.zwzz, -cb0[5].xyxx
- mov r0.z, cb0[5].w
- dp3 r0.z, r0.xyzx, cb0[4].xyzx
- dp2 r0.x, r0.xyxx, r0.xyxx
- add r0.x, r0.x, -cb0[6].x
- mul r0.x, r0.x, cb0[5].z
- mad r0.x, r0.z, r0.z, -r0.x
- lt r0.y, r0.x, l(0.000000)
- sqrt r1.x, |r0.x|
- mov r1.y, -r1.x
- add r0.xz, r0.zzzz, r1.xxyx
- div r0.xz, r0.xxzx, cb0[5].zzzz
- mul r1.xy, r0.xzxx, cb0[4].zzzz
- ge r1.xy, r1.xyxx, -cb0[5].wwww
- and r1.xy, r1.xyxx, l(0x3f800000, 0x3f800000, 0, 0)
- add r0.x, -r0.z, r0.x
- mad r2.x, r1.x, r0.x, r0.z
- mov r2.y, l(0.500000)
- sample r2.xyzw, r2.xyxx, t0.xyzw, s0
- if_nz r0.y
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- max r0.x, r1.y, r1.x
- ge r0.x, l(0.000000), r0.x
- if_nz r0.x
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- mul r2.xyz, r2.wwww, r2.xyzx
- sample r0.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.wwww, r2.xyzw
- ret
- // Approximately 33 instruction slots used
-
- };
- }
-
- pass A0Wrap
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44
- // float2 dimensions; // Offset: 48 Size: 8
- // float3 diff; // Offset: 64 Size: 12 [unused]
- // float2 center1; // Offset: 80 Size: 8 [unused]
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4 [unused]
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb2 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused]
- // float2 dimensions; // Offset: 48 Size: 8 [unused]
- // float3 diff; // Offset: 64 Size: 12
- // float2 center1; // Offset: 80 Size: 8
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sWrapSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb2 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 4 2 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c2, 0.5, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mul r0.w, c1.w, c1.w
- add r0.xy, t0.wzzw, -c1
- dp2add r0.w, r0, r0, -r0.w
- mul r0.w, r0.w, c2.x
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- rcp r0.x, r0.x
- mul r0.x, r0.x, r0.w
- mov r0.y, c2.x
- texld r1, t0, s1
- texld r2, r0, s0
- mov r0.w, c1.w
- mad r0.x, r0.x, -c0.z, -r0.w
- mul r2.xyz, r2.w, r2
- mul r1, r1.w, r2
- cmp r0, r0.x, c2.y, r1
- mov oC0, r0
-
- // approximately 18 instruction slots used (2 texture, 16 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[6], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 2
- add r0.xy, v1.zwzz, -cb0[5].xyxx
- mov r0.z, cb0[5].w
- dp3 r0.z, r0.xyzx, cb0[4].xyzx
- dp2 r0.x, r0.xyxx, r0.xyxx
- mad r0.x, -cb0[5].w, cb0[5].w, r0.x
- mul r0.x, r0.x, l(0.500000)
- div r0.x, r0.x, r0.z
- mul r0.z, r0.x, cb0[4].z
- ge r0.z, -cb0[5].w, r0.z
- mov r0.y, l(0.500000)
- sample r1.xyzw, r0.xyxx, t0.xyzw, s0
- if_nz r0.z
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- mul r1.xyz, r1.wwww, r1.xyzx
- sample r0.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.wwww, r1.xyzw
- ret
- // Approximately 19 instruction slots used
-
- };
- }
-
- pass APosMirror
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44
- // float2 dimensions; // Offset: 48 Size: 8
- // float3 diff; // Offset: 64 Size: 12 [unused]
- // float2 center1; // Offset: 80 Size: 8 [unused]
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4 [unused]
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb2 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused]
- // float2 dimensions; // Offset: 48 Size: 8 [unused]
- // float3 diff; // Offset: 64 Size: 12
- // float2 center1; // Offset: 80 Size: 8
- // float A; // Offset: 88 Size: 4
- // float radius1; // Offset: 92 Size: 4
- // float sq_radius1; // Offset: 96 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sMirrorSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb2 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 4 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c3, 0.5, 0, 0, 0
- def c4, 1, -1, 0, -0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- add r0.xy, t0.wzzw, -c1
- dp2add r0.w, r0, r0, -c2.x
- mul r0.w, r0.w, c1.z
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- mad r0.y, r0.x, r0.x, -r0.w
- abs r0.z, r0.y
- rsq r0.z, r0.z
- rcp r1.x, r0.z
- mov r1.yz, -r1.x
- add r0.xzw, r0.x, r1.xyyz
- rcp r1.x, c1.z
- mul r0.xzw, r0, r1.x
- mov r1.w, c1.w
- mad r1.xyz, r0.xzww, c0.z, r1.w
- cmp r2.x, r1.x, r0.x, r0.w
- cmp r0.xzw, r1.xyyz, c4.xyxy, c4.zyzw
- mov r2.y, c3.x
- texld r1, t0, s1
- texld r2, r2, s0
- mul r2.xyz, r2.w, r2
- mul r1, r1.w, r2
- add r0.w, r0.w, r0.x
- cmp r0.x, r0.w, r0.x, r0.z
- cmp r1, -r0.x, c4.z, r1
- cmp r0, r0.y, r1, c4.z
- mov oC0, r0
-
- // approximately 28 instruction slots used (2 texture, 26 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[7], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 3
- add r0.xy, v1.zwzz, -cb0[5].xyxx
- mov r0.z, cb0[5].w
- dp3 r0.z, r0.xyzx, cb0[4].xyzx
- dp2 r0.x, r0.xyxx, r0.xyxx
- add r0.x, r0.x, -cb0[6].x
- mul r0.x, r0.x, cb0[5].z
- mad r0.x, r0.z, r0.z, -r0.x
- lt r0.y, r0.x, l(0.000000)
- sqrt r1.x, |r0.x|
- mov r1.y, -r1.x
- add r0.xz, r0.zzzz, r1.xxyx
- div r0.xz, r0.xxzx, cb0[5].zzzz
- mul r1.xy, r0.xzxx, cb0[4].zzzz
- ge r1.xy, r1.xyxx, -cb0[5].wwww
- and r1.xy, r1.xyxx, l(0x3f800000, 0x3f800000, 0, 0)
- add r0.x, -r0.z, r0.x
- mad r2.x, r1.x, r0.x, r0.z
- mov r2.y, l(0.500000)
- sample r2.xyzw, r2.xyxx, t0.xyzw, s0
- if_nz r0.y
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- max r0.x, r1.y, r1.x
- ge r0.x, l(0.000000), r0.x
- if_nz r0.x
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- mul r2.xyz, r2.wwww, r2.xyzx
- sample r0.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.wwww, r2.xyzw
- ret
- // Approximately 33 instruction slots used
-
- };
- }
-
- pass A0Mirror
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44
- // float2 dimensions; // Offset: 48 Size: 8
- // float3 diff; // Offset: 64 Size: 12 [unused]
- // float2 center1; // Offset: 80 Size: 8 [unused]
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4 [unused]
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb2 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb2
- // {
- //
- // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused]
- // float2 dimensions; // Offset: 48 Size: 8 [unused]
- // float3 diff; // Offset: 64 Size: 12
- // float2 center1; // Offset: 80 Size: 8
- // float A; // Offset: 88 Size: 4 [unused]
- // float radius1; // Offset: 92 Size: 4
- // float sq_radius1; // Offset: 96 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sMirrorSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb2 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 4 2 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c2, 0.5, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mul r0.w, c1.w, c1.w
- add r0.xy, t0.wzzw, -c1
- dp2add r0.w, r0, r0, -r0.w
- mul r0.w, r0.w, c2.x
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- rcp r0.x, r0.x
- mul r0.x, r0.x, r0.w
- mov r0.y, c2.x
- texld r1, t0, s1
- texld r2, r0, s0
- mov r0.w, c1.w
- mad r0.x, r0.x, -c0.z, -r0.w
- mul r2.xyz, r2.w, r2
- mul r1, r1.w, r2
- cmp r0, r0.x, c2.y, r1
- mov oC0, r0
-
- // approximately 18 instruction slots used (2 texture, 16 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[6], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 2
- add r0.xy, v1.zwzz, -cb0[5].xyxx
- mov r0.z, cb0[5].w
- dp3 r0.z, r0.xyzx, cb0[4].xyzx
- dp2 r0.x, r0.xyxx, r0.xyxx
- mad r0.x, -cb0[5].w, cb0[5].w, r0.x
- mul r0.x, r0.x, l(0.500000)
- div r0.x, r0.x, r0.z
- mul r0.z, r0.x, cb0[4].z
- ge r0.z, -cb0[5].w, r0.z
- mov r0.y, l(0.500000)
- sample r1.xyzw, r0.xyxx, t0.xyzw, s0
- if_nz r0.z
- mov o0.xyzw, l(0,0,0,0)
- ret
- endif
- mul r1.xyz, r1.wwww, r1.xyzx
- sample r0.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.wwww, r1.xyzw
- ret
- // Approximately 19 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleConicGradient
-{
- pass APos
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb3
- // {
- //
- // float3x3 DeviceSpaceToUserSpace_cb3;// Offset: 0 Size: 44
- // float2 dimensions_cb3; // Offset: 48 Size: 8
- // float2 center; // Offset: 56 Size: 8 [unused]
- // float angle; // Offset: 64 Size: 4 [unused]
- // float start_offset; // Offset: 68 Size: 4 [unused]
- // float end_offset; // Offset: 72 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb3 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb3
- // {
- //
- // float3x3 DeviceSpaceToUserSpace_cb3;// Offset: 0 Size: 44 [unused]
- // float2 dimensions_cb3; // Offset: 48 Size: 8 [unused]
- // float2 center; // Offset: 56 Size: 8
- // float angle; // Offset: 64 Size: 4
- // float start_offset; // Offset: 68 Size: 4
- // float end_offset; // Offset: 72 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb3 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 3 2 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c2, 0.0208350997, -0.0851330012, 0.180141002, -0.330299497
- def c3, 0.999866009, 0, 1, 3.14159274
- def c4, -2, 1.57079637, 1.57079601, 0.159154981
- def c5, 0.5, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- add r0.xy, t0.wzzw, -c0.zwzw
- abs r0.zw, r0.xyxy
- add r1.xy, -r0.zwzw, r0.wzzw
- cmp r0.zw, r1.x, r0, r0.xywz
- cmp r1.x, r1.y, c3.y, c3.z
- rcp r0.w, r0.w
- mul r0.z, r0.w, r0.z
- mul r0.w, r0.z, r0.z
- mad r1.y, r0.w, c2.x, c2.y
- mad r1.y, r0.w, r1.y, c2.z
- mad r1.y, r0.w, r1.y, c2.w
- mad r0.w, r0.w, r1.y, c3.x
- mul r0.z, r0.w, r0.z
- mad r0.w, r0.z, c4.x, c4.y
- mad r0.z, r0.w, r1.x, r0.z
- cmp r0.w, r0.x, -c3.y, -c3.w
- add r0.z, r0.w, r0.z
- add r0.w, r0.z, r0.z
- add r1.x, -r0.x, r0.y
- cmp r0.xy, r1.x, r0, r0.yxzw
- cmp r0.y, r0.y, c3.z, c3.y
- cmp r0.x, r0.x, c3.y, r0.y
- mad r0.x, r0.x, -r0.w, r0.z
- add r0.x, r0.x, -c1.x
- add r0.x, r0.x, c4.z
- mul r0.y, r0.x, c4.w
- abs r0.y, r0.y
- frc r0.y, r0.y
- cmp r0.x, r0.x, r0.y, -r0.y
- add r0.x, r0.x, -c1.y
- add r0.y, -c1.y, c1.z
- rcp r0.y, r0.y
- mul r0.x, r0.y, r0.x
- mov r0.y, c5.x
- texld r1, t0, s1
- texld r0, r0, s0
- mul r0.xyz, r0.w, r0
- mul r0, r1.w, r0
- mov oC0, r0
-
- // approximately 39 instruction slots used (2 texture, 37 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[5], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 2
- add r0.xy, v1.wzww, -cb0[3].wzww
- max r0.z, |r0.y|, |r0.x|
- div r0.z, l(1.000000, 1.000000, 1.000000, 1.000000), r0.z
- min r0.w, |r0.y|, |r0.x|
- mul r0.z, r0.z, r0.w
- mul r0.w, r0.z, r0.z
- mad r1.x, r0.w, l(0.020835), l(-0.085133)
- mad r1.x, r0.w, r1.x, l(0.180141)
- mad r1.x, r0.w, r1.x, l(-0.330299)
- mad r0.w, r0.w, r1.x, l(0.999866)
- mul r1.x, r0.w, r0.z
- mad r1.x, r1.x, l(-2.000000), l(1.570796)
- lt r1.y, |r0.y|, |r0.x|
- and r1.x, r1.y, r1.x
- mad r0.z, r0.z, r0.w, r1.x
- lt r0.w, r0.y, -r0.y
- and r0.w, r0.w, l(0xc0490fdb)
- add r0.z, r0.w, r0.z
- min r0.w, r0.y, r0.x
- max r0.x, r0.y, r0.x
- ge r0.x, r0.x, -r0.x
- lt r0.y, r0.w, -r0.w
- and r0.x, r0.x, r0.y
- movc r0.x, r0.x, -r0.z, r0.z
- add r0.x, r0.x, -cb0[4].x
- add r0.x, r0.x, l(1.570796)
- mul r0.x, r0.x, l(0.159155)
- ge r0.y, r0.x, -r0.x
- frc r0.x, |r0.x|
- movc r0.x, r0.y, r0.x, -r0.x
- add r0.x, r0.x, -cb0[4].y
- add r0.y, -cb0[4].y, cb0[4].z
- div r0.x, r0.x, r0.y
- mov r0.y, l(0.500000)
- sample r0.xyzw, r0.xyxx, t0.xyzw, s0
- mul r0.xyz, r0.wwww, r0.xyzx
- sample r1.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.xyzw, r1.wwww
- ret
- // Approximately 39 instruction slots used
-
- };
- }
-
- pass APosWrap
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb3
- // {
- //
- // float3x3 DeviceSpaceToUserSpace_cb3;// Offset: 0 Size: 44
- // float2 dimensions_cb3; // Offset: 48 Size: 8
- // float2 center; // Offset: 56 Size: 8 [unused]
- // float angle; // Offset: 64 Size: 4 [unused]
- // float start_offset; // Offset: 68 Size: 4 [unused]
- // float end_offset; // Offset: 72 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb3 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb3
- // {
- //
- // float3x3 DeviceSpaceToUserSpace_cb3;// Offset: 0 Size: 44 [unused]
- // float2 dimensions_cb3; // Offset: 48 Size: 8 [unused]
- // float2 center; // Offset: 56 Size: 8
- // float angle; // Offset: 64 Size: 4
- // float start_offset; // Offset: 68 Size: 4
- // float end_offset; // Offset: 72 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sWrapSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb3 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 3 2 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c2, 0.0208350997, -0.0851330012, 0.180141002, -0.330299497
- def c3, 0.999866009, 0, 1, 3.14159274
- def c4, -2, 1.57079637, 1.57079601, 0.159154981
- def c5, 0.5, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- add r0.xy, t0.wzzw, -c0.zwzw
- abs r0.zw, r0.xyxy
- add r1.xy, -r0.zwzw, r0.wzzw
- cmp r0.zw, r1.x, r0, r0.xywz
- cmp r1.x, r1.y, c3.y, c3.z
- rcp r0.w, r0.w
- mul r0.z, r0.w, r0.z
- mul r0.w, r0.z, r0.z
- mad r1.y, r0.w, c2.x, c2.y
- mad r1.y, r0.w, r1.y, c2.z
- mad r1.y, r0.w, r1.y, c2.w
- mad r0.w, r0.w, r1.y, c3.x
- mul r0.z, r0.w, r0.z
- mad r0.w, r0.z, c4.x, c4.y
- mad r0.z, r0.w, r1.x, r0.z
- cmp r0.w, r0.x, -c3.y, -c3.w
- add r0.z, r0.w, r0.z
- add r0.w, r0.z, r0.z
- add r1.x, -r0.x, r0.y
- cmp r0.xy, r1.x, r0, r0.yxzw
- cmp r0.y, r0.y, c3.z, c3.y
- cmp r0.x, r0.x, c3.y, r0.y
- mad r0.x, r0.x, -r0.w, r0.z
- add r0.x, r0.x, -c1.x
- add r0.x, r0.x, c4.z
- mul r0.y, r0.x, c4.w
- abs r0.y, r0.y
- frc r0.y, r0.y
- cmp r0.x, r0.x, r0.y, -r0.y
- add r0.x, r0.x, -c1.y
- add r0.y, -c1.y, c1.z
- rcp r0.y, r0.y
- mul r0.x, r0.y, r0.x
- mov r0.y, c5.x
- texld r1, t0, s1
- texld r0, r0, s0
- mul r0.xyz, r0.w, r0
- mul r0, r1.w, r0
- mov oC0, r0
-
- // approximately 39 instruction slots used (2 texture, 37 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[5], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 2
- add r0.xy, v1.wzww, -cb0[3].wzww
- max r0.z, |r0.y|, |r0.x|
- div r0.z, l(1.000000, 1.000000, 1.000000, 1.000000), r0.z
- min r0.w, |r0.y|, |r0.x|
- mul r0.z, r0.z, r0.w
- mul r0.w, r0.z, r0.z
- mad r1.x, r0.w, l(0.020835), l(-0.085133)
- mad r1.x, r0.w, r1.x, l(0.180141)
- mad r1.x, r0.w, r1.x, l(-0.330299)
- mad r0.w, r0.w, r1.x, l(0.999866)
- mul r1.x, r0.w, r0.z
- mad r1.x, r1.x, l(-2.000000), l(1.570796)
- lt r1.y, |r0.y|, |r0.x|
- and r1.x, r1.y, r1.x
- mad r0.z, r0.z, r0.w, r1.x
- lt r0.w, r0.y, -r0.y
- and r0.w, r0.w, l(0xc0490fdb)
- add r0.z, r0.w, r0.z
- min r0.w, r0.y, r0.x
- max r0.x, r0.y, r0.x
- ge r0.x, r0.x, -r0.x
- lt r0.y, r0.w, -r0.w
- and r0.x, r0.x, r0.y
- movc r0.x, r0.x, -r0.z, r0.z
- add r0.x, r0.x, -cb0[4].x
- add r0.x, r0.x, l(1.570796)
- mul r0.x, r0.x, l(0.159155)
- ge r0.y, r0.x, -r0.x
- frc r0.x, |r0.x|
- movc r0.x, r0.y, r0.x, -r0.x
- add r0.x, r0.x, -cb0[4].y
- add r0.y, -cb0[4].y, cb0[4].z
- div r0.x, r0.x, r0.y
- mov r0.y, l(0.500000)
- sample r0.xyzw, r0.xyxx, t0.xyzw, s0
- mul r0.xyz, r0.wwww, r0.xyzx
- sample r1.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.xyzw, r1.wwww
- ret
- // Approximately 39 instruction slots used
-
- };
- }
-
- pass APosMirror
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- // cbuffer cb3
- // {
- //
- // float3x3 DeviceSpaceToUserSpace_cb3;// Offset: 0 Size: 44
- // float2 dimensions_cb3; // Offset: 48 Size: 8
- // float2 center; // Offset: 56 Size: 8 [unused]
- // float angle; // Offset: 64 Size: 4 [unused]
- // float start_offset; // Offset: 68 Size: 4 [unused]
- // float end_offset; // Offset: 72 Size: 4 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- // cb3 cbuffer NA NA 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 1 ( FLT, FLT, FLT, FLT)
- // c2 cb0 2 1 ( FLT, FLT, FLT, FLT)
- // c3 cb1 0 2 ( FLT, FLT, FLT, FLT)
- // c5 cb1 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c6, 1, 0.5, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad r0.xy, v0, c1.zwzw, c1
- add r0.z, r0.x, c6.x
- mul r0.z, r0.z, c5.x
- mul r1.x, r0.z, c6.y
- add r0.z, -r0.y, c6.x
- add oPos.xy, r0, c0
- mul r0.x, r0.z, c5.y
- mul r1.y, r0.x, c6.y
- mov r1.z, c6.x
- dp3 oT0.w, r1, c3
- dp3 oT0.z, r1, c4
- mov oPos.zw, c6.xyzx
-
- // approximately 13 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_constantbuffer cb1[4], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- dcl_temps 2
- mov o0.zw, l(0,0,0,1.000000)
- mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.xy, r0.xyxx
- add r0.x, r0.x, l(1.000000)
- add r0.y, -r0.y, l(1.000000)
- mul r0.xy, r0.xyxx, cb1[3].xyxx
- mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
- mov r1.z, l(1.000000)
- dp3 o1.z, r1.xyzx, cb1[0].xyzx
- dp3 o1.w, r1.xyzx, cb1[1].xyzx
- mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx
- ret
- // Approximately 12 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb3
- // {
- //
- // float3x3 DeviceSpaceToUserSpace_cb3;// Offset: 0 Size: 44 [unused]
- // float2 dimensions_cb3; // Offset: 48 Size: 8 [unused]
- // float2 center; // Offset: 56 Size: 8
- // float angle; // Offset: 64 Size: 4
- // float start_offset; // Offset: 68 Size: 4
- // float end_offset; // Offset: 72 Size: 4
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sMirrorSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb3 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 3 2 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c2, 0.0208350997, -0.0851330012, 0.180141002, -0.330299497
- def c3, 0.999866009, 0, 1, 3.14159274
- def c4, -2, 1.57079637, 1.57079601, 0.159154981
- def c5, 0.5, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- add r0.xy, t0.wzzw, -c0.zwzw
- abs r0.zw, r0.xyxy
- add r1.xy, -r0.zwzw, r0.wzzw
- cmp r0.zw, r1.x, r0, r0.xywz
- cmp r1.x, r1.y, c3.y, c3.z
- rcp r0.w, r0.w
- mul r0.z, r0.w, r0.z
- mul r0.w, r0.z, r0.z
- mad r1.y, r0.w, c2.x, c2.y
- mad r1.y, r0.w, r1.y, c2.z
- mad r1.y, r0.w, r1.y, c2.w
- mad r0.w, r0.w, r1.y, c3.x
- mul r0.z, r0.w, r0.z
- mad r0.w, r0.z, c4.x, c4.y
- mad r0.z, r0.w, r1.x, r0.z
- cmp r0.w, r0.x, -c3.y, -c3.w
- add r0.z, r0.w, r0.z
- add r0.w, r0.z, r0.z
- add r1.x, -r0.x, r0.y
- cmp r0.xy, r1.x, r0, r0.yxzw
- cmp r0.y, r0.y, c3.z, c3.y
- cmp r0.x, r0.x, c3.y, r0.y
- mad r0.x, r0.x, -r0.w, r0.z
- add r0.x, r0.x, -c1.x
- add r0.x, r0.x, c4.z
- mul r0.y, r0.x, c4.w
- abs r0.y, r0.y
- frc r0.y, r0.y
- cmp r0.x, r0.x, r0.y, -r0.y
- add r0.x, r0.x, -c1.y
- add r0.y, -c1.y, c1.z
- rcp r0.y, r0.y
- mul r0.x, r0.y, r0.x
- mov r0.y, c5.x
- texld r1, t0, s1
- texld r0, r0, s0
- mul r0.xyz, r0.w, r0
- mul r0, r1.w, r0
- mov oC0, r0
-
- // approximately 39 instruction slots used (2 texture, 37 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[5], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 2
- add r0.xy, v1.wzww, -cb0[3].wzww
- max r0.z, |r0.y|, |r0.x|
- div r0.z, l(1.000000, 1.000000, 1.000000, 1.000000), r0.z
- min r0.w, |r0.y|, |r0.x|
- mul r0.z, r0.z, r0.w
- mul r0.w, r0.z, r0.z
- mad r1.x, r0.w, l(0.020835), l(-0.085133)
- mad r1.x, r0.w, r1.x, l(0.180141)
- mad r1.x, r0.w, r1.x, l(-0.330299)
- mad r0.w, r0.w, r1.x, l(0.999866)
- mul r1.x, r0.w, r0.z
- mad r1.x, r1.x, l(-2.000000), l(1.570796)
- lt r1.y, |r0.y|, |r0.x|
- and r1.x, r1.y, r1.x
- mad r0.z, r0.z, r0.w, r1.x
- lt r0.w, r0.y, -r0.y
- and r0.w, r0.w, l(0xc0490fdb)
- add r0.z, r0.w, r0.z
- min r0.w, r0.y, r0.x
- max r0.x, r0.y, r0.x
- ge r0.x, r0.x, -r0.x
- lt r0.y, r0.w, -r0.w
- and r0.x, r0.x, r0.y
- movc r0.x, r0.x, -r0.z, r0.z
- add r0.x, r0.x, -cb0[4].x
- add r0.x, r0.x, l(1.570796)
- mul r0.x, r0.x, l(0.159155)
- ge r0.y, r0.x, -r0.x
- frc r0.x, |r0.x|
- movc r0.x, r0.y, r0.x, -r0.x
- add r0.x, r0.x, -cb0[4].y
- add r0.y, -cb0[4].y, cb0[4].z
- div r0.x, r0.x, r0.y
- mov r0.y, l(0.500000)
- sample r0.xyzw, r0.xyxx, t0.xyzw, s0
- mul r0.xyz, r0.wwww, r0.xyzx
- sample r1.xyzw, v1.xyxx, t1.xyzw, s1
- mul o0.xyzw, r0.xyzw, r1.wwww
- ret
- // Approximately 39 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleMaskedTexture
-{
- pass P0
- {
- RasterizerState = TextureRast;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mov r0.xy, t0.wzzw
- texld r1, t0, s0
- texld r0, r0, s1
- mul r0, r0.w, r1
- mov oC0, r0
-
- // approximately 5 instruction slots used (2 texture, 3 arithmetic)
- ps_4_0
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 2
- sample r0.xyzw, v1.xyxx, t0.xyzw, s0
- sample r1.xyzw, v1.zwzz, t1.xyzw, s1
- mul o0.xyzw, r0.xyzw, r1.wwww
- ret
- // Approximately 4 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleTextureWithShadow
-{
- pass P0
- {
- RasterizerState = TextureRast;
- AB_BlendFactor = float4(1, 1, 1, 1);
- AB_SampleMask = uint(0xffffffff);
- BlendState = ShadowBlendH;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb1
- // {
- //
- // float4 BlurOffsetsH[3]; // Offset: 0 Size: 48
- // float4 BlurOffsetsV[3]; // Offset: 48 Size: 48 [unused]
- // float4 BlurWeights[3]; // Offset: 96 Size: 48
- // float4 ShadowColor; // Offset: 144 Size: 16
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sShadowSampler sampler NA NA 0 1
- // tex texture float4 2d 0 1
- // cb1 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 0 3 ( FLT, FLT, FLT, FLT)
- // c3 cb0 6 4 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- dcl t0
- dcl_2d s0
- add r0.x, t0.x, c0.y
- mov r0.y, t0.y
- add r1.x, t0.x, c0.x
- mov r1.y, t0.y
- texld r0, r0, s0
- texld r1, r1, s0
- mul r0.x, r0.w, c3.y
- mad r0.x, c3.x, r1.w, r0.x
- add r1.x, t0.x, c0.z
- mov r1.y, t0.y
- add r2.x, t0.x, c0.w
- mov r2.y, t0.y
- texld r1, r1, s0
- texld r2, r2, s0
- mad r0.x, c3.z, r1.w, r0.x
- mad r0.x, c3.w, r2.w, r0.x
- add r1.x, t0.x, c1.x
- mov r1.y, t0.y
- add r2.x, t0.x, c1.y
- mov r2.y, t0.y
- texld r1, r1, s0
- texld r2, r2, s0
- mad r0.x, c4.x, r1.w, r0.x
- mad r0.x, c4.y, r2.w, r0.x
- add r1.x, t0.x, c1.z
- mov r1.y, t0.y
- add r2.x, t0.x, c1.w
- mov r2.y, t0.y
- texld r1, r1, s0
- texld r2, r2, s0
- mad r0.x, c4.z, r1.w, r0.x
- mad r0.x, c4.w, r2.w, r0.x
- add r1.x, t0.x, c2.x
- mov r1.y, t0.y
- texld r1, r1, s0
- mad r0.x, c5.x, r1.w, r0.x
- mul r0, r0.x, c6
- mov oC0, r0
-
- // approximately 38 instruction slots used (9 texture, 29 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[10], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_input_ps linear v1.xy
- dcl_output o0.xyzw
- dcl_temps 4
- add r0.xyzw, v1.xxxx, cb0[0].zxwy
- mov r1.xz, r0.yywy
- mov r1.yw, v1.yyyy
- sample r2.xyzw, r1.zwzz, t0.xyzw, s0
- sample r1.xyzw, r1.xyxx, t0.xyzw, s0
- mul r1.x, r2.w, cb0[6].y
- mad r1.x, cb0[6].x, r1.w, r1.x
- mov r0.yw, v1.yyyy
- sample r2.xyzw, r0.xyxx, t0.xyzw, s0
- sample r0.xyzw, r0.zwzz, t0.xyzw, s0
- mad r0.x, cb0[6].z, r2.w, r1.x
- mad r0.x, cb0[6].w, r0.w, r0.x
- add r1.xyzw, v1.xxxx, cb0[1].zxwy
- mov r2.xz, r1.yywy
- mov r2.yw, v1.yyyy
- sample r3.xyzw, r2.xyxx, t0.xyzw, s0
- sample r2.xyzw, r2.zwzz, t0.xyzw, s0
- mad r0.x, cb0[7].x, r3.w, r0.x
- mad r0.x, cb0[7].y, r2.w, r0.x
- mov r1.yw, v1.yyyy
- sample r2.xyzw, r1.xyxx, t0.xyzw, s0
- sample r1.xyzw, r1.zwzz, t0.xyzw, s0
- mad r0.x, cb0[7].z, r2.w, r0.x
- mad r0.x, cb0[7].w, r1.w, r0.x
- add r1.x, v1.x, cb0[2].x
- mov r1.y, v1.y
- sample r1.xyzw, r1.xyxx, t0.xyzw, s0
- mad r0.x, cb0[8].x, r1.w, r0.x
- mul o0.xyzw, r0.xxxx, cb0[9].xyzw
- ret
- // Approximately 30 instruction slots used
-
- };
- }
-
- pass P1
- {
- RasterizerState = TextureRast;
- AB_BlendFactor = float4(1, 1, 1, 1);
- AB_SampleMask = uint(0xffffffff);
- BlendState = ShadowBlendV;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb1
- // {
- //
- // float4 BlurOffsetsH[3]; // Offset: 0 Size: 48 [unused]
- // float4 BlurOffsetsV[3]; // Offset: 48 Size: 48
- // float4 BlurWeights[3]; // Offset: 96 Size: 48
- // float4 ShadowColor; // Offset: 144 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sShadowSampler sampler NA NA 0 1
- // tex texture float4 2d 0 1
- // cb1 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 3 6 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- dcl t0
- dcl_2d s0
- add r0.y, t0.y, c0.y
- mov r0.x, t0.x
- add r1.y, t0.y, c0.x
- mov r1.x, t0.x
- texld r0, r0, s0
- texld r1, r1, s0
- mul r0, r0, c3.y
- mad r0, c3.x, r1, r0
- add r1.y, t0.y, c0.z
- mov r1.x, t0.x
- add r2.y, t0.y, c0.w
- mov r2.x, t0.x
- texld r1, r1, s0
- texld r2, r2, s0
- mad r0, c3.z, r1, r0
- mad r0, c3.w, r2, r0
- add r1.y, t0.y, c1.x
- mov r1.x, t0.x
- add r2.y, t0.y, c1.y
- mov r2.x, t0.x
- texld r1, r1, s0
- texld r2, r2, s0
- mad r0, c4.x, r1, r0
- mad r0, c4.y, r2, r0
- add r1.y, t0.y, c1.z
- mov r1.x, t0.x
- add r2.y, t0.y, c1.w
- mov r2.x, t0.x
- texld r1, r1, s0
- texld r2, r2, s0
- mad r0, c4.z, r1, r0
- mad r0, c4.w, r2, r0
- add r1.y, t0.y, c2.x
- mov r1.x, t0.x
- texld r1, r1, s0
- mad r0, c5.x, r1, r0
- mov oC0, r0
-
- // approximately 37 instruction slots used (9 texture, 28 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[9], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_input_ps linear v1.xy
- dcl_output o0.xyzw
- dcl_temps 4
- mov r0.xz, v1.xxxx
- add r1.xyzw, v1.yyyy, cb0[3].xzyw
- mov r0.yw, r1.xxxz
- sample r2.xyzw, r0.zwzz, t0.xyzw, s0
- sample r0.xyzw, r0.xyxx, t0.xyzw, s0
- mul r2.xyzw, r2.xyzw, cb0[6].yyyy
- mad r0.xyzw, cb0[6].xxxx, r0.xyzw, r2.xyzw
- mov r1.xz, v1.xxxx
- sample r2.xyzw, r1.xyxx, t0.xyzw, s0
- sample r1.xyzw, r1.zwzz, t0.xyzw, s0
- mad r0.xyzw, cb0[6].zzzz, r2.xyzw, r0.xyzw
- mad r0.xyzw, cb0[6].wwww, r1.xyzw, r0.xyzw
- mov r1.xz, v1.xxxx
- add r2.xyzw, v1.yyyy, cb0[4].xzyw
- mov r1.yw, r2.xxxz
- sample r3.xyzw, r1.xyxx, t0.xyzw, s0
- sample r1.xyzw, r1.zwzz, t0.xyzw, s0
- mad r0.xyzw, cb0[7].xxxx, r3.xyzw, r0.xyzw
- mad r0.xyzw, cb0[7].yyyy, r1.xyzw, r0.xyzw
- mov r2.xz, v1.xxxx
- sample r1.xyzw, r2.xyxx, t0.xyzw, s0
- sample r2.xyzw, r2.zwzz, t0.xyzw, s0
- mad r0.xyzw, cb0[7].zzzz, r1.xyzw, r0.xyzw
- mad r0.xyzw, cb0[7].wwww, r2.xyzw, r0.xyzw
- add r1.y, v1.y, cb0[5].x
- mov r1.x, v1.x
- sample r1.xyzw, r1.xyxx, t0.xyzw, s0
- mad o0.xyzw, cb0[8].xxxx, r1.xyzw, r0.xyzw
- ret
- // Approximately 29 instruction slots used
-
- };
- }
-
- pass P2
- {
- RasterizerState = TextureRast;
- AB_BlendFactor = float4(1, 1, 1, 1);
- AB_SampleMask = uint(0xffffffff);
- BlendState = ShadowBlendV;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb1
- // {
- //
- // float4 BlurOffsetsH[3]; // Offset: 0 Size: 48 [unused]
- // float4 BlurOffsetsV[3]; // Offset: 48 Size: 48
- // float4 BlurWeights[3]; // Offset: 96 Size: 48
- // float4 ShadowColor; // Offset: 144 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sMaskSampler sampler NA NA 0 1
- // sShadowSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb1 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 3 6 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t1
- // s1 s1 t0
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- dcl t0
- dcl_2d s0
- dcl_2d s1
- add r0.y, t0.y, c0.y
- mov r0.x, t0.x
- add r1.y, t0.y, c0.x
- mov r1.x, t0.x
- texld r0, r0, s1
- texld r1, r1, s1
- mul r0, r0, c3.y
- mad r0, c3.x, r1, r0
- add r1.y, t0.y, c0.z
- mov r1.x, t0.x
- add r2.y, t0.y, c0.w
- mov r2.x, t0.x
- texld r1, r1, s1
- texld r2, r2, s1
- mad r0, c3.z, r1, r0
- mad r0, c3.w, r2, r0
- add r1.y, t0.y, c1.x
- mov r1.x, t0.x
- add r2.y, t0.y, c1.y
- mov r2.x, t0.x
- texld r1, r1, s1
- texld r2, r2, s1
- mad r0, c4.x, r1, r0
- mad r0, c4.y, r2, r0
- add r1.y, t0.y, c1.z
- mov r1.x, t0.x
- add r2.y, t0.y, c1.w
- mov r2.x, t0.x
- texld r1, r1, s1
- texld r2, r2, s1
- mad r0, c4.z, r1, r0
- mad r0, c4.w, r2, r0
- add r1.y, t0.y, c2.x
- mov r1.x, t0.x
- mov r2.xy, t0.wzzw
- texld r1, r1, s1
- texld r2, r2, s0
- mad r0, c5.x, r1, r0
- mul r0, r2.w, r0
- mov oC0, r0
-
- // approximately 40 instruction slots used (10 texture, 30 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[9], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_temps 4
- mov r0.xz, v1.xxxx
- add r1.xyzw, v1.yyyy, cb0[3].xzyw
- mov r0.yw, r1.xxxz
- sample r2.xyzw, r0.zwzz, t0.xyzw, s1
- sample r0.xyzw, r0.xyxx, t0.xyzw, s1
- mul r2.xyzw, r2.xyzw, cb0[6].yyyy
- mad r0.xyzw, cb0[6].xxxx, r0.xyzw, r2.xyzw
- mov r1.xz, v1.xxxx
- sample r2.xyzw, r1.xyxx, t0.xyzw, s1
- sample r1.xyzw, r1.zwzz, t0.xyzw, s1
- mad r0.xyzw, cb0[6].zzzz, r2.xyzw, r0.xyzw
- mad r0.xyzw, cb0[6].wwww, r1.xyzw, r0.xyzw
- mov r1.xz, v1.xxxx
- add r2.xyzw, v1.yyyy, cb0[4].xzyw
- mov r1.yw, r2.xxxz
- sample r3.xyzw, r1.xyxx, t0.xyzw, s1
- sample r1.xyzw, r1.zwzz, t0.xyzw, s1
- mad r0.xyzw, cb0[7].xxxx, r3.xyzw, r0.xyzw
- mad r0.xyzw, cb0[7].yyyy, r1.xyzw, r0.xyzw
- mov r2.xz, v1.xxxx
- sample r1.xyzw, r2.xyxx, t0.xyzw, s1
- sample r2.xyzw, r2.zwzz, t0.xyzw, s1
- mad r0.xyzw, cb0[7].zzzz, r1.xyzw, r0.xyzw
- mad r0.xyzw, cb0[7].wwww, r2.xyzw, r0.xyzw
- add r1.y, v1.y, cb0[5].x
- mov r1.x, v1.x
- sample r1.xyzw, r1.xyxx, t0.xyzw, s1
- mad r0.xyzw, cb0[8].xxxx, r1.xyzw, r0.xyzw
- sample r1.xyzw, v1.zwzz, t1.xyzw, s0
- mul o0.xyzw, r0.xyzw, r1.wwww
- ret
- // Approximately 31 instruction slots used
-
- };
- }
-
-}
-
-technique10 SampleTextTexture
-{
- pass Unmasked
- {
- RasterizerState = TextureRast;
- AB_BlendFactor = float4(0, 0, 0, 0);
- AB_SampleMask = uint(0xffffffff);
- BlendState = bTextBlend;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16 [unused]
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16 [unused]
- // float4 TextColor; // Offset: 48 Size: 16
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // tex texture float4 2d 0 1
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- // SV_Target 1 xyzw 1 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c1, 1, 0, 0, 0
- dcl t0
- dcl_2d s0
- mov r0.xyz, c0
- mad r0, r0.xyzx, c1.xxxy, c1.yyyx
- mov oC0, r0
- texld r0, t0, s0
- mul r0, r0.zyxy, c0.w
- mov oC1, r0
-
- // approximately 6 instruction slots used (1 texture, 5 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[4], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_input_ps linear v1.xy
- dcl_output o0.xyzw
- dcl_output o1.xyzw
- dcl_temps 1
- mov o0.xyz, cb0[3].xyzx
- mov o0.w, l(1.000000)
- sample r0.xyzw, v1.xyxx, t0.xyzw, s0
- mul o1.xyzw, r0.zyxy, cb0[3].wwww
- ret
- // Approximately 5 instruction slots used
-
- };
- }
-
- pass Masked
- {
- RasterizerState = TextureRast;
- AB_BlendFactor = float4(0, 0, 0, 0);
- AB_SampleMask = uint(0xffffffff);
- BlendState = bTextBlend;
- VertexShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16
- // float4 TexCoords; // Offset: 16 Size: 16
- // float4 MaskTexCoords; // Offset: 32 Size: 16
- // float4 TextColor; // Offset: 48 Size: 16 [unused]
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // POSITION 0 xyz 0 NONE float xy
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float xyzw
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c1 cb0 0 3 ( FLT, FLT, FLT, FLT)
- //
- //
- // Runtime generated constant mappings:
- //
- // Target Reg Constant Description
- // ---------- --------------------------------------------------
- // c0 Vertex Shader position offset
- //
- //
- // Level9 shader bytecode:
- //
- vs_2_x
- def c4, 0, 1, 0, 0
- dcl_texcoord v0
- mad oT0.xy, v0, c2.zwzw, c2
- mad oT0.zw, v0.xyyx, c3.xywz, c3.xyyx
- mad r0.xy, v0, c1.zwzw, c1
- add oPos.xy, r0, c0
- mov oPos.zw, c4.xyxy
-
- // approximately 5 instruction slots used
- vs_4_0
- dcl_constantbuffer cb0[3], immediateIndexed
- dcl_input v0.xy
- dcl_output_siv o0.xyzw, position
- dcl_output o1.xy
- dcl_output o1.zw
- mad o0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
- mov o0.zw, l(0,0,0,1.000000)
- mad o1.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
- mad o1.zw, v0.xxxy, cb0[2].zzzw, cb0[2].xxxy
- ret
- // Approximately 5 instruction slots used
-
- };
- GeometryShader = NULL;
- PixelShader = asm {
- //
- // Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
- //
- //
- // Buffer Definitions:
- //
- // cbuffer cb0
- // {
- //
- // float4 QuadDesc; // Offset: 0 Size: 16 [unused]
- // float4 TexCoords; // Offset: 16 Size: 16 [unused]
- // float4 MaskTexCoords; // Offset: 32 Size: 16 [unused]
- // float4 TextColor; // Offset: 48 Size: 16
- //
- // }
- //
- //
- // Resource Bindings:
- //
- // Name Type Format Dim Slot Elements
- // ------------------------------ ---------- ------- ----------- ---- --------
- // sSampler sampler NA NA 0 1
- // sMaskSampler sampler NA NA 1 1
- // tex texture float4 2d 0 1
- // mask texture float4 2d 1 1
- // cb0 cbuffer NA NA 0 1
- //
- //
- //
- // Input signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Position 0 xyzw 0 POS float
- // TEXCOORD 0 xy 1 NONE float xy
- // TEXCOORD 1 zw 1 NONE float zw
- //
- //
- // Output signature:
- //
- // Name Index Mask Register SysValue Format Used
- // -------------------- ----- ------ -------- -------- ------- ------
- // SV_Target 0 xyzw 0 TARGET float xyzw
- // SV_Target 1 xyzw 1 TARGET float xyzw
- //
- //
- // Constant buffer to DX9 shader constant mappings:
- //
- // Target Reg Buffer Start Reg # of Regs Data Conversion
- // ---------- ------- --------- --------- ----------------------
- // c0 cb0 3 1 ( FLT, FLT, FLT, FLT)
- //
- //
- // Sampler/Resource to DX9 shader sampler mappings:
- //
- // Target Sampler Source Sampler Source Resource
- // -------------- --------------- ----------------
- // s0 s0 t0
- // s1 s1 t1
- //
- //
- // Level9 shader bytecode:
- //
- ps_2_x
- def c1, 1, 0, 0, 0
- dcl t0
- dcl_2d s0
- dcl_2d s1
- mov r0.xyz, c0
- mad r0, r0.xyzx, c1.xxxy, c1.yyyx
- mov oC0, r0
- mov r0.xy, t0.wzzw
- texld r1, t0, s0
- texld r0, r0, s1
- mul r1, r1.zyxy, c0.w
- mul r0, r0.w, r1
- mov oC1, r0
-
- // approximately 9 instruction slots used (2 texture, 7 arithmetic)
- ps_4_0
- dcl_constantbuffer cb0[4], immediateIndexed
- dcl_sampler s0, mode_default
- dcl_sampler s1, mode_default
- dcl_resource_texture2d (float,float,float,float) t0
- dcl_resource_texture2d (float,float,float,float) t1
- dcl_input_ps linear v1.xy
- dcl_input_ps linear v1.zw
- dcl_output o0.xyzw
- dcl_output o1.xyzw
- dcl_temps 2
- mov o0.xyz, cb0[3].xyzx
- mov o0.w, l(1.000000)
- sample r0.xyzw, v1.xyxx, t0.xyzw, s0
- mul r0.xyzw, r0.zyxy, cb0[3].wwww
- sample r1.xyzw, v1.zwzz, t1.xyzw, s1
- mul o1.xyzw, r0.xyzw, r1.wwww
- ret
- // Approximately 7 instruction slots used
-
- };
- }
-
-}
-
-#endif
-
-const BYTE d2deffect[] = {
- 68, 88, 66, 67, 90, 71, 243, 245, 168, 88, 153, 105, 108, 146, 135,
- 174, 199, 125, 74, 149, 1, 0, 0, 0, 137, 80, 1, 0, 1, 0,
- 0, 0, 36, 0, 0, 0, 70, 88, 49, 48, 93, 80, 1, 0, 1,
- 16, 255, 254, 5, 0, 0, 0, 22, 0, 0, 0, 13, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
- 0, 37, 66, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 38, 0, 0, 0,
- 0, 0, 0, 0, 36, 71, 108, 111, 98, 97, 108, 115, 0, 117, 105,
- 110, 116, 0, 13, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 16, 0, 0, 0, 4, 0, 0, 0, 25, 9, 0,
- 0, 98, 108, 101, 110, 100, 111, 112, 0, 99, 98, 48, 0, 102, 108,
- 111, 97, 116, 52, 0, 58, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 10,
- 33, 0, 0, 81, 117, 97, 100, 68, 101, 115, 99, 0, 84, 101, 120,
- 67, 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67,
- 111, 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114,
- 0, 99, 98, 49, 0, 58, 0, 0, 0, 1, 0, 0, 0, 3, 0,
- 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 48, 0, 0, 0, 10,
- 33, 0, 0, 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, 72,
- 0, 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, 86, 0, 66,
- 108, 117, 114, 87, 101, 105, 103, 104, 116, 115, 0, 83, 104, 97, 100,
- 111, 119, 67, 111, 108, 111, 114, 0, 99, 98, 50, 0, 102, 108, 111,
- 97, 116, 51, 120, 51, 0, 222, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 44, 0, 0, 0, 48, 0, 0, 0, 36, 0, 0, 0,
- 11, 91, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101,
- 84, 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 0, 102, 108, 111,
- 97, 116, 50, 0, 26, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 8, 0, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0, 10, 17,
- 0, 0, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 0, 102, 108,
- 111, 97, 116, 51, 0, 72, 1, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 12, 0, 0, 0, 10,
- 25, 0, 0, 100, 105, 102, 102, 0, 99, 101, 110, 116, 101, 114, 49,
- 0, 102, 108, 111, 97, 116, 0, 120, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 4, 0, 0,
- 0, 9, 9, 0, 0, 65, 0, 114, 97, 100, 105, 117, 115, 49, 0,
- 115, 113, 95, 114, 97, 100, 105, 117, 115, 49, 0, 99, 98, 51, 0,
- 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85, 115,
- 101, 114, 83, 112, 97, 99, 101, 95, 99, 98, 51, 0, 100, 105, 109,
- 101, 110, 115, 105, 111, 110, 115, 95, 99, 98, 51, 0, 99, 101, 110,
- 116, 101, 114, 0, 97, 110, 103, 108, 101, 0, 115, 116, 97, 114, 116,
- 95, 111, 102, 102, 115, 101, 116, 0, 101, 110, 100, 95, 111, 102, 102,
- 115, 101, 116, 0, 84, 101, 120, 116, 117, 114, 101, 50, 68, 0, 2,
- 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 116, 101, 120,
- 0, 98, 99, 107, 116, 101, 120, 0, 109, 97, 115, 107, 0, 83, 97,
- 109, 112, 108, 101, 114, 83, 116, 97, 116, 101, 0, 56, 2, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 21, 0, 0, 0, 115, 83, 97, 109, 112, 108,
- 101, 114, 0, 1, 0, 0, 0, 2, 0, 0, 0, 21, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
- 0, 2, 0, 0, 0, 3, 0, 0, 0, 115, 66, 99, 107, 83, 97,
- 109, 112, 108, 101, 114, 0, 1, 0, 0, 0, 2, 0, 0, 0, 21,
- 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 115, 87, 114,
- 97, 112, 83, 97, 109, 112, 108, 101, 114, 0, 1, 0, 0, 0, 2,
- 0, 0, 0, 21, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0,
- 0, 115, 77, 105, 114, 114, 111, 114, 83, 97, 109, 112, 108, 101, 114,
- 0, 1, 0, 0, 0, 2, 0, 0, 0, 21, 0, 0, 0, 1, 0,
- 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 0, 0, 2, 0, 0, 0, 115, 77, 97, 115, 107, 83, 97, 109,
- 112, 108, 101, 114, 0, 1, 0, 0, 0, 2, 0, 0, 0, 21, 0,
- 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 1,
- 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 115, 83, 104, 97,
- 100, 111, 119, 83, 97, 109, 112, 108, 101, 114, 0, 1, 0, 0, 0,
- 2, 0, 0, 0, 21, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
- 0, 4, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 4, 0,
- 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 82, 97, 115, 116, 101, 114, 105,
- 122, 101, 114, 83, 116, 97, 116, 101, 0, 170, 3, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 84, 101, 120, 116, 117, 114, 101, 82,
- 97, 115, 116, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 66, 108,
- 101, 110, 100, 83, 116, 97, 116, 101, 0, 250, 3, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 83, 104, 97, 100, 111, 119, 66, 108,
- 101, 110, 100, 72, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 15, 0, 0, 0, 83,
- 104, 97, 100, 111, 119, 66, 108, 101, 110, 100, 86, 0, 1, 0, 0,
- 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0,
- 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 6,
- 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0,
- 0, 2, 0, 0, 0, 6, 0, 0, 0, 1, 0, 0, 0, 2, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 15,
- 0, 0, 0, 98, 84, 101, 120, 116, 66, 108, 101, 110, 100, 0, 1,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
- 0, 16, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 17, 0,
- 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1,
- 0, 0, 0, 2, 0, 0, 0, 18, 0, 0, 0, 1, 0, 0, 0,
- 2, 0, 0, 0, 19, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 15, 0,
- 0, 0, 83, 97, 109, 112, 108, 101, 84, 101, 120, 116, 117, 114, 101,
- 0, 80, 48, 0, 68, 4, 0, 0, 68, 88, 66, 67, 77, 85, 167,
- 240, 56, 56, 155, 78, 125, 96, 49, 253, 103, 100, 22, 62, 1, 0,
- 0, 0, 68, 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 248,
- 0, 0, 0, 244, 1, 0, 0, 112, 2, 0, 0, 160, 3, 0, 0,
- 212, 3, 0, 0, 65, 111, 110, 57, 184, 0, 0, 0, 184, 0, 0,
- 0, 0, 2, 254, 255, 132, 0, 0, 0, 52, 0, 0, 0, 1, 0,
- 36, 0, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 36, 0, 1,
- 0, 48, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0, 5, 4, 0, 15,
- 160, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0,
- 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4,
- 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160,
- 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 12, 224, 0, 0, 20,
- 144, 3, 0, 180, 160, 3, 0, 20, 160, 4, 0, 0, 4, 0, 0,
- 3, 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2,
- 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160,
- 1, 0, 0, 2, 0, 0, 12, 192, 4, 0, 68, 160, 255, 255, 0,
- 0, 83, 72, 68, 82, 244, 0, 0, 0, 64, 0, 1, 0, 61, 0,
- 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0,
- 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0,
- 0, 3, 194, 32, 16, 0, 1, 0, 0, 0, 50, 0, 0, 11, 50,
- 32, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0,
- 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 8, 194, 32,
- 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11,
- 50, 32, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0,
- 0, 230, 138, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 70, 128,
- 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 11, 194,
- 32, 16, 0, 1, 0, 0, 0, 6, 20, 16, 0, 0, 0, 0, 0,
- 166, 142, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 132, 32,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84,
- 65, 84, 116, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 82, 68, 69, 70, 40, 1, 0, 0, 1, 0, 0, 0, 64,
- 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 0, 4, 254, 255,
- 0, 1, 0, 0, 246, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 60,
- 0, 0, 0, 4, 0, 0, 0, 88, 0, 0, 0, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0,
- 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0,
- 0, 0, 212, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 2,
- 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0,
- 32, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0,
- 0, 0, 0, 0, 0, 236, 0, 0, 0, 48, 0, 0, 0, 16, 0,
- 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 81,
- 117, 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0,
- 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120,
- 67, 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67,
- 111, 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114,
- 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32,
- 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109,
- 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46,
- 49, 54, 51, 56, 52, 0, 73, 83, 71, 78, 44, 0, 0, 0, 1,
- 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0,
- 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83,
- 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12,
- 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80,
- 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82,
- 68, 0, 171, 171, 171, 59, 5, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 212, 2, 0, 0, 68,
- 88, 66, 67, 17, 106, 69, 218, 119, 68, 79, 85, 211, 176, 27, 183,
- 77, 210, 131, 41, 1, 0, 0, 0, 212, 2, 0, 0, 6, 0, 0,
- 0, 56, 0, 0, 0, 164, 0, 0, 0, 16, 1, 0, 0, 140, 1,
- 0, 0, 48, 2, 0, 0, 160, 2, 0, 0, 65, 111, 110, 57, 100,
- 0, 0, 0, 100, 0, 0, 0, 0, 2, 255, 255, 60, 0, 0, 0,
- 40, 0, 0, 0, 0, 0, 40, 0, 0, 0, 40, 0, 0, 0, 40,
- 0, 1, 0, 36, 0, 0, 0, 40, 0, 0, 0, 0, 0, 1, 2,
- 255, 255, 31, 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31,
- 0, 0, 2, 0, 0, 0, 144, 0, 8, 15, 160, 66, 0, 0, 3,
- 0, 0, 15, 128, 0, 0, 228, 176, 0, 8, 228, 160, 1, 0, 0,
- 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0, 83, 72,
- 68, 82, 100, 0, 0, 0, 64, 0, 0, 0, 25, 0, 0, 0, 90,
- 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 88, 24, 0, 4,
- 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0,
- 3, 50, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32,
- 16, 0, 0, 0, 0, 0, 69, 0, 0, 9, 242, 32, 16, 0, 0,
- 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0,
- 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 62, 0, 0,
- 1, 83, 84, 65, 84, 116, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 82, 68, 69, 70, 156, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 28, 0, 0, 0, 0,
- 4, 255, 255, 0, 1, 0, 0, 105, 0, 0, 0, 92, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 101, 0,
- 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255,
- 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0,
- 115, 83, 97, 109, 112, 108, 101, 114, 0, 116, 101, 120, 0, 77, 105,
- 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83,
- 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108,
- 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51,
- 56, 52, 0, 171, 73, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0,
- 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 0,
- 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84,
- 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83, 71, 78,
- 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116,
- 0, 171, 171, 151, 9, 0, 0, 0, 0, 0, 0, 83, 97, 109, 112,
- 108, 101, 84, 101, 120, 116, 117, 114, 101, 70, 111, 114, 83, 101, 112,
- 97, 114, 97, 98, 108, 101, 66, 108, 101, 110, 100, 105, 110, 103, 95,
- 49, 0, 68, 4, 0, 0, 68, 88, 66, 67, 77, 85, 167, 240, 56,
- 56, 155, 78, 125, 96, 49, 253, 103, 100, 22, 62, 1, 0, 0, 0,
- 68, 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 248, 0, 0,
- 0, 244, 1, 0, 0, 112, 2, 0, 0, 160, 3, 0, 0, 212, 3,
- 0, 0, 65, 111, 110, 57, 184, 0, 0, 0, 184, 0, 0, 0, 0,
- 2, 254, 255, 132, 0, 0, 0, 52, 0, 0, 0, 1, 0, 36, 0,
- 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 36, 0, 1, 0, 48,
- 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 254, 255, 81, 0, 0, 5, 4, 0, 15, 160, 0,
- 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 31, 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4, 0, 0,
- 4, 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160, 2, 0,
- 228, 160, 4, 0, 0, 4, 0, 0, 12, 224, 0, 0, 20, 144, 3,
- 0, 180, 160, 3, 0, 20, 160, 4, 0, 0, 4, 0, 0, 3, 128,
- 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0, 0,
- 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160, 1, 0,
- 0, 2, 0, 0, 12, 192, 4, 0, 68, 160, 255, 255, 0, 0, 83,
- 72, 68, 82, 244, 0, 0, 0, 64, 0, 1, 0, 61, 0, 0, 0,
- 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0,
- 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101,
- 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3,
- 194, 32, 16, 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16,
- 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0,
- 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50, 32,
- 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230,
- 138, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 70, 128, 32, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 11, 194, 32, 16,
- 0, 1, 0, 0, 0, 6, 20, 16, 0, 0, 0, 0, 0, 166, 142,
- 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 132, 32, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84,
- 116, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 82, 68, 69, 70, 40, 1, 0, 0, 1, 0, 0, 0, 64, 0, 0,
- 0, 1, 0, 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1,
- 0, 0, 246, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 60, 0, 0,
- 0, 4, 0, 0, 0, 88, 0, 0, 0, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0,
- 212, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0,
- 0, 196, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 32, 0,
- 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0,
- 0, 0, 0, 236, 0, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0,
- 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 81, 117, 97,
- 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111,
- 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111,
- 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 77,
- 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76,
- 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105,
- 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54,
- 51, 56, 52, 0, 73, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0,
- 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 80,
- 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83, 71, 78,
- 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12, 0, 0,
- 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115,
- 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0,
- 171, 171, 171, 155, 12, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 72, 13, 0, 0, 68, 88, 66,
- 67, 193, 65, 249, 15, 188, 209, 36, 123, 179, 111, 3, 63, 40, 10,
- 7, 98, 1, 0, 0, 0, 72, 13, 0, 0, 6, 0, 0, 0, 56,
- 0, 0, 0, 172, 4, 0, 0, 188, 10, 0, 0, 56, 11, 0, 0,
- 164, 12, 0, 0, 20, 13, 0, 0, 65, 111, 110, 57, 108, 4, 0,
- 0, 108, 4, 0, 0, 0, 2, 255, 255, 52, 4, 0, 0, 56, 0,
- 0, 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0, 56, 0, 2,
- 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 2, 255,
- 255, 81, 0, 0, 5, 1, 0, 15, 160, 0, 0, 128, 191, 0, 0,
- 0, 192, 0, 0, 64, 192, 0, 0, 128, 192, 81, 0, 0, 5, 2,
- 0, 15, 160, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 192, 81, 0, 0, 5, 3, 0, 15, 160, 0, 0, 160,
- 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0,
- 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0,
- 0, 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144,
- 1, 8, 15, 160, 1, 0, 0, 2, 0, 0, 8, 128, 0, 0, 0,
- 160, 2, 0, 0, 3, 0, 0, 1, 128, 0, 0, 255, 128, 3, 0,
- 0, 160, 5, 0, 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 0,
- 0, 0, 128, 66, 0, 0, 3, 1, 0, 15, 128, 0, 0, 228, 176,
- 1, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 0, 0, 228,
- 176, 0, 8, 228, 160, 6, 0, 0, 2, 0, 0, 2, 128, 2, 0,
- 255, 128, 4, 0, 0, 4, 3, 0, 7, 128, 2, 0, 228, 128, 0,
- 0, 85, 128, 2, 0, 0, 161, 5, 0, 0, 3, 3, 0, 7, 128,
- 3, 0, 228, 128, 3, 0, 228, 128, 4, 0, 0, 4, 4, 0, 7,
- 128, 2, 0, 228, 128, 0, 0, 85, 129, 2, 0, 0, 160, 6, 0,
- 0, 2, 3, 0, 8, 128, 4, 0, 0, 128, 6, 0, 0, 2, 4,
- 0, 8, 128, 1, 0, 255, 128, 5, 0, 0, 3, 5, 0, 7, 128,
- 1, 0, 228, 128, 4, 0, 255, 128, 4, 0, 0, 4, 1, 0, 7,
- 128, 1, 0, 228, 128, 4, 0, 255, 129, 2, 0, 170, 160, 5, 0,
- 0, 3, 3, 0, 8, 128, 3, 0, 255, 128, 5, 0, 0, 128, 10,
- 0, 0, 3, 4, 0, 8, 128, 3, 0, 255, 128, 2, 0, 0, 160,
- 88, 0, 0, 4, 4, 0, 8, 128, 3, 0, 0, 129, 2, 0, 0,
- 160, 4, 0, 255, 128, 5, 0, 0, 3, 6, 0, 7, 128, 5, 0,
- 228, 128, 5, 0, 228, 128, 88, 0, 0, 4, 7, 0, 1, 128, 6,
- 0, 0, 129, 2, 0, 85, 160, 4, 0, 255, 128, 6, 0, 0, 2,
- 4, 0, 8, 128, 4, 0, 85, 128, 5, 0, 0, 3, 4, 0, 8,
- 128, 4, 0, 255, 128, 5, 0, 85, 128, 10, 0, 0, 3, 5, 0,
- 8, 128, 4, 0, 255, 128, 2, 0, 0, 160, 88, 0, 0, 4, 4,
- 0, 8, 128, 3, 0, 85, 129, 2, 0, 0, 160, 5, 0, 255, 128,
- 88, 0, 0, 4, 7, 0, 2, 128, 6, 0, 85, 129, 2, 0, 85,
- 160, 4, 0, 255, 128, 6, 0, 0, 2, 4, 0, 8, 128, 4, 0,
- 170, 128, 5, 0, 0, 3, 4, 0, 8, 128, 4, 0, 255, 128, 5,
- 0, 170, 128, 10, 0, 0, 3, 5, 0, 8, 128, 4, 0, 255, 128,
- 2, 0, 0, 160, 88, 0, 0, 4, 4, 0, 8, 128, 3, 0, 170,
- 129, 2, 0, 0, 160, 5, 0, 255, 128, 88, 0, 0, 4, 7, 0,
- 4, 128, 6, 0, 170, 129, 2, 0, 85, 160, 4, 0, 255, 128, 5,
- 0, 0, 3, 3, 0, 7, 128, 0, 0, 85, 128, 2, 0, 228, 128,
- 4, 0, 0, 4, 6, 0, 7, 128, 2, 0, 228, 128, 0, 0, 85,
- 128, 5, 0, 228, 128, 4, 0, 0, 4, 6, 0, 7, 128, 3, 0,
- 228, 128, 5, 0, 228, 129, 6, 0, 228, 128, 11, 0, 0, 3, 8,
- 0, 7, 128, 3, 0, 228, 128, 5, 0, 228, 128, 88, 0, 0, 4,
- 0, 0, 7, 128, 0, 0, 0, 129, 8, 0, 228, 128, 7, 0, 228,
- 128, 2, 0, 0, 3, 7, 0, 15, 128, 0, 0, 255, 128, 1, 0,
- 228, 160, 5, 0, 0, 3, 7, 0, 15, 128, 7, 0, 228, 128, 7,
- 0, 228, 128, 10, 0, 0, 3, 8, 0, 7, 128, 5, 0, 228, 128,
- 3, 0, 228, 128, 88, 0, 0, 4, 0, 0, 7, 128, 7, 0, 255,
- 129, 8, 0, 228, 128, 0, 0, 228, 128, 4, 0, 0, 4, 8, 0,
- 7, 128, 5, 0, 228, 128, 2, 0, 255, 161, 2, 0, 0, 161, 2,
- 0, 0, 3, 8, 0, 7, 128, 8, 0, 228, 129, 2, 0, 0, 160,
- 4, 0, 0, 4, 4, 0, 7, 128, 4, 0, 228, 128, 8, 0, 228,
- 129, 2, 0, 0, 160, 2, 0, 0, 3, 8, 0, 7, 128, 5, 0,
- 228, 128, 5, 0, 228, 128, 5, 0, 0, 3, 5, 0, 7, 128, 5,
- 0, 228, 128, 3, 0, 228, 128, 5, 0, 0, 3, 8, 0, 7, 128,
- 3, 0, 228, 128, 8, 0, 228, 128, 88, 0, 0, 4, 1, 0, 7,
- 128, 1, 0, 228, 128, 8, 0, 228, 128, 4, 0, 228, 128, 88, 0,
- 0, 4, 0, 0, 7, 128, 7, 0, 170, 129, 1, 0, 228, 128, 0,
- 0, 228, 128, 88, 0, 0, 4, 0, 0, 7, 128, 7, 0, 85, 129,
- 6, 0, 228, 128, 0, 0, 228, 128, 88, 0, 0, 4, 0, 0, 7,
- 128, 7, 0, 0, 129, 5, 0, 228, 128, 0, 0, 228, 128, 18, 0,
- 0, 4, 4, 0, 7, 128, 1, 0, 255, 128, 0, 0, 228, 128, 3,
- 0, 228, 128, 5, 0, 0, 3, 4, 0, 8, 128, 1, 0, 255, 128,
- 1, 0, 255, 128, 88, 0, 0, 4, 4, 0, 8, 128, 4, 0, 255,
- 129, 2, 0, 0, 160, 2, 0, 85, 160, 5, 0, 0, 3, 0, 0,
- 7, 128, 2, 0, 255, 128, 4, 0, 228, 128, 5, 0, 0, 3, 0,
- 0, 8, 128, 2, 0, 255, 128, 2, 0, 255, 128, 88, 0, 0, 4,
- 0, 0, 8, 128, 0, 0, 255, 129, 2, 0, 0, 160, 2, 0, 85,
- 160, 2, 0, 0, 3, 0, 0, 8, 128, 4, 0, 255, 128, 0, 0,
- 255, 128, 88, 0, 0, 4, 2, 0, 7, 128, 0, 0, 255, 129, 0,
- 0, 228, 128, 2, 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128,
- 2, 0, 228, 128, 255, 255, 0, 0, 83, 72, 68, 82, 8, 6, 0,
- 0, 64, 0, 0, 0, 130, 1, 0, 0, 89, 0, 0, 4, 70, 142,
- 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 90, 0, 0, 3, 0,
- 96, 16, 0, 0, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0,
- 1, 0, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0,
- 0, 85, 85, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0,
- 0, 0, 85, 85, 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1,
- 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0, 0,
- 104, 0, 0, 2, 7, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16,
- 0, 0, 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 126,
- 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 69,
- 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0,
- 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0, 96, 16,
- 0, 1, 0, 0, 0, 24, 0, 0, 7, 18, 0, 16, 0, 2, 0,
- 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0,
- 0, 0, 0, 24, 0, 0, 7, 34, 0, 16, 0, 2, 0, 0, 0,
- 58, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 0, 60, 0, 0, 7, 18, 0, 16, 0, 2, 0, 0, 0, 26, 0,
- 16, 0, 2, 0, 0, 0, 10, 0, 16, 0, 2, 0, 0, 0, 31,
- 0, 4, 3, 10, 0, 16, 0, 2, 0, 0, 0, 54, 0, 0, 5,
- 242, 32, 16, 0, 0, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0,
- 0, 62, 0, 0, 1, 21, 0, 0, 1, 14, 0, 0, 7, 114, 0,
- 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 246,
- 15, 16, 0, 0, 0, 0, 0, 14, 0, 0, 7, 114, 0, 16, 0,
- 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 246, 15, 16,
- 0, 1, 0, 0, 0, 32, 0, 0, 8, 18, 0, 16, 0, 2, 0,
- 0, 0, 10, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 64, 0, 0, 1, 0, 0, 0, 31, 0, 4, 3, 10, 0, 16, 0,
- 2, 0, 0, 0, 56, 0, 0, 7, 114, 0, 16, 0, 2, 0, 0,
- 0, 70, 2, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 1, 0,
- 0, 0, 18, 0, 0, 1, 32, 0, 0, 8, 130, 0, 16, 0, 2,
- 0, 0, 0, 10, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 64, 0, 0, 2, 0, 0, 0, 31, 0, 4, 3, 58, 0, 16,
- 0, 2, 0, 0, 0, 0, 0, 0, 7, 114, 0, 16, 0, 3, 0,
- 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 1,
- 0, 0, 0, 50, 0, 0, 10, 114, 0, 16, 0, 2, 0, 0, 0,
- 70, 2, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 70, 2, 16,
- 0, 1, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0, 18, 0,
- 0, 1, 32, 0, 0, 8, 130, 0, 16, 0, 2, 0, 0, 0, 10,
- 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0,
- 3, 0, 0, 0, 31, 0, 4, 3, 58, 0, 16, 0, 2, 0, 0,
- 0, 29, 0, 0, 10, 114, 0, 16, 0, 3, 0, 0, 0, 2, 64,
- 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 63, 0,
- 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 0, 0, 0, 7,
- 114, 0, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0,
- 0, 70, 2, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 114, 0,
- 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70,
- 2, 16, 0, 4, 0, 0, 0, 50, 0, 0, 15, 114, 0, 16, 0,
- 5, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 2, 64, 0,
- 0, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 128, 191, 0, 0, 128, 191, 0,
- 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 11, 114, 0, 16, 0,
- 6, 0, 0, 0, 70, 2, 16, 128, 65, 0, 0, 0, 0, 0, 0,
- 0, 2, 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0,
- 128, 63, 0, 0, 0, 0, 0, 0, 0, 11, 114, 0, 16, 0, 5,
- 0, 0, 0, 70, 2, 16, 128, 65, 0, 0, 0, 5, 0, 0, 0,
- 2, 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128,
- 63, 0, 0, 0, 0, 50, 0, 0, 13, 114, 0, 16, 0, 5, 0,
- 0, 0, 70, 2, 16, 128, 65, 0, 0, 0, 6, 0, 0, 0, 70,
- 2, 16, 0, 5, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63,
- 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 55, 0, 0,
- 9, 114, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 3, 0,
- 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 5,
- 0, 0, 0, 18, 0, 0, 1, 32, 0, 0, 8, 130, 0, 16, 0,
- 2, 0, 0, 0, 10, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 64, 0, 0, 4, 0, 0, 0, 31, 0, 4, 3, 58, 0,
- 16, 0, 2, 0, 0, 0, 51, 0, 0, 7, 114, 0, 16, 0, 2,
- 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0,
- 1, 0, 0, 0, 18, 0, 0, 1, 32, 0, 0, 8, 130, 0, 16,
- 0, 2, 0, 0, 0, 10, 128, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 5, 0, 0, 0, 31, 0, 4, 3, 58,
- 0, 16, 0, 2, 0, 0, 0, 52, 0, 0, 7, 114, 0, 16, 0,
- 2, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70, 2, 16,
- 0, 1, 0, 0, 0, 18, 0, 0, 1, 24, 0, 0, 10, 114, 0,
- 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 24, 0, 0, 10, 114, 0, 16, 0, 4, 0, 0,
- 0, 70, 2, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0,
- 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0,
- 0, 0, 11, 114, 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128,
- 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 14, 0,
- 0, 7, 114, 0, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1,
- 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0, 51, 0, 0, 10,
- 114, 0, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0,
- 0, 2, 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0,
- 128, 63, 0, 0, 0, 0, 55, 0, 0, 12, 114, 0, 16, 0, 1,
- 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 2, 64, 0, 0,
- 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0,
- 0, 70, 2, 16, 0, 1, 0, 0, 0, 55, 0, 0, 12, 114, 0,
- 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 21, 0, 0,
- 1, 21, 0, 0, 1, 21, 0, 0, 1, 21, 0, 0, 1, 21, 0,
- 0, 1, 0, 0, 0, 8, 18, 0, 16, 0, 1, 0, 0, 0, 58,
- 0, 16, 128, 65, 0, 0, 0, 1, 0, 0, 0, 1, 64, 0, 0,
- 0, 0, 128, 63, 56, 0, 0, 7, 226, 0, 16, 0, 1, 0, 0,
- 0, 246, 15, 16, 0, 1, 0, 0, 0, 6, 9, 16, 0, 2, 0,
- 0, 0, 50, 0, 0, 9, 114, 0, 16, 0, 0, 0, 0, 0, 6,
- 0, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0,
- 150, 7, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 114, 32, 16,
- 0, 0, 0, 0, 0, 246, 15, 16, 0, 0, 0, 0, 0, 70, 2,
- 16, 0, 0, 0, 0, 0, 54, 0, 0, 5, 130, 32, 16, 0, 0,
- 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 62, 0, 0, 1,
- 83, 84, 65, 84, 116, 0, 0, 0, 57, 0, 0, 0, 7, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 25, 0, 0, 0, 5, 0,
- 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 68, 69, 70, 100, 1, 0, 0, 1, 0, 0,
- 0, 232, 0, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 4,
- 255, 255, 0, 1, 0, 0, 48, 1, 0, 0, 188, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 209,
- 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0,
- 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0,
- 0, 213, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0,
- 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 1, 0, 0, 0, 12,
- 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 115, 83, 97, 109, 112, 108, 101, 114, 0, 115,
- 66, 99, 107, 83, 97, 109, 112, 108, 101, 114, 0, 116, 101, 120, 0,
- 98, 99, 107, 116, 101, 120, 0, 36, 71, 108, 111, 98, 97, 108, 115,
- 0, 171, 171, 171, 220, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 1,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 32,
- 1, 0, 0, 0, 0, 0, 0, 98, 108, 101, 110, 100, 111, 112, 0,
- 0, 0, 19, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32,
- 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109,
- 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46,
- 49, 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 104, 0, 0,
- 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15,
- 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0,
- 0, 0, 12, 0, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105,
- 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171,
- 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97,
- 114, 103, 101, 116, 0, 171, 171, 247, 16, 0, 0, 0, 0, 0, 0,
- 83, 97, 109, 112, 108, 101, 84, 101, 120, 116, 117, 114, 101, 70, 111,
- 114, 83, 101, 112, 97, 114, 97, 98, 108, 101, 66, 108, 101, 110, 100,
- 105, 110, 103, 95, 50, 0, 68, 4, 0, 0, 68, 88, 66, 67, 77,
- 85, 167, 240, 56, 56, 155, 78, 125, 96, 49, 253, 103, 100, 22, 62,
- 1, 0, 0, 0, 68, 4, 0, 0, 6, 0, 0, 0, 56, 0, 0,
- 0, 248, 0, 0, 0, 244, 1, 0, 0, 112, 2, 0, 0, 160, 3,
- 0, 0, 212, 3, 0, 0, 65, 111, 110, 57, 184, 0, 0, 0, 184,
- 0, 0, 0, 0, 2, 254, 255, 132, 0, 0, 0, 52, 0, 0, 0,
- 1, 0, 36, 0, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 36,
- 0, 1, 0, 48, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0, 5, 4,
- 0, 15, 160, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0, 0, 15,
- 144, 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144, 2, 0,
- 238, 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 12, 224, 0,
- 0, 20, 144, 3, 0, 180, 160, 3, 0, 20, 160, 4, 0, 0, 4,
- 0, 0, 3, 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228,
- 160, 2, 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0,
- 228, 160, 1, 0, 0, 2, 0, 0, 12, 192, 4, 0, 68, 160, 255,
- 255, 0, 0, 83, 72, 68, 82, 244, 0, 0, 0, 64, 0, 1, 0,
- 61, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0,
- 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0,
- 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0, 50, 0, 0,
- 11, 50, 32, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0,
- 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70,
- 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 8,
- 194, 32, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0,
- 0, 11, 50, 32, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0,
- 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 70, 128, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0,
- 11, 194, 32, 16, 0, 1, 0, 0, 0, 6, 20, 16, 0, 0, 0,
- 0, 0, 166, 142, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6,
- 132, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 62, 0, 0, 1,
- 83, 84, 65, 84, 116, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 68, 69, 70, 40, 1, 0, 0, 1, 0, 0,
- 0, 64, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 0, 4,
- 254, 255, 0, 1, 0, 0, 246, 0, 0, 0, 60, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48,
- 0, 60, 0, 0, 0, 4, 0, 0, 0, 88, 0, 0, 0, 64, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0,
- 0, 0, 0, 0, 212, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
- 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 222, 0,
- 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196,
- 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 48, 0, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0,
- 0, 81, 117, 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0,
- 3, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
- 101, 120, 67, 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101,
- 120, 67, 111, 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108,
- 111, 114, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82,
- 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67,
- 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48,
- 48, 46, 49, 54, 51, 56, 52, 0, 73, 83, 71, 78, 44, 0, 0,
- 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7,
- 3, 0, 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171,
- 79, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0,
- 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 3, 12, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86,
- 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79,
- 79, 82, 68, 0, 171, 171, 171, 111, 30, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 88, 17, 0,
- 0, 68, 88, 66, 67, 62, 116, 36, 238, 73, 63, 158, 95, 222, 192,
- 91, 113, 112, 55, 55, 145, 1, 0, 0, 0, 88, 17, 0, 0, 6,
- 0, 0, 0, 56, 0, 0, 0, 88, 6, 0, 0, 204, 14, 0, 0,
- 72, 15, 0, 0, 180, 16, 0, 0, 36, 17, 0, 0, 65, 111, 110,
- 57, 24, 6, 0, 0, 24, 6, 0, 0, 0, 2, 255, 255, 224, 5,
- 0, 0, 56, 0, 0, 0, 1, 0, 44, 0, 0, 0, 56, 0, 0,
- 0, 56, 0, 2, 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0,
- 0, 1, 2, 255, 255, 81, 0, 0, 5, 1, 0, 15, 160, 0, 0,
- 224, 192, 0, 0, 0, 193, 0, 0, 16, 193, 0, 0, 32, 193, 81,
- 0, 0, 5, 2, 0, 15, 160, 0, 0, 128, 63, 0, 0, 0, 0,
- 0, 0, 128, 191, 0, 0, 128, 62, 81, 0, 0, 5, 3, 0, 15,
- 160, 0, 0, 0, 63, 0, 0, 0, 64, 0, 0, 128, 191, 0, 0,
- 128, 64, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0, 128, 65, 0,
- 0, 64, 193, 0, 0, 0, 64, 0, 0, 128, 63, 31, 0, 0, 2,
- 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0,
- 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1, 8,
- 15, 160, 1, 0, 0, 2, 0, 0, 8, 128, 0, 0, 0, 160, 2,
- 0, 0, 3, 0, 0, 15, 128, 0, 0, 255, 128, 1, 0, 228, 160,
- 5, 0, 0, 3, 0, 0, 15, 128, 0, 0, 228, 128, 0, 0, 228,
- 128, 66, 0, 0, 3, 1, 0, 15, 128, 0, 0, 228, 176, 0, 8,
- 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 0, 0, 228, 176, 1,
- 8, 228, 160, 6, 0, 0, 2, 3, 0, 8, 128, 2, 0, 255, 128,
- 4, 0, 0, 4, 3, 0, 3, 128, 2, 0, 233, 128, 3, 0, 255,
- 129, 2, 0, 255, 160, 5, 0, 0, 3, 4, 0, 7, 128, 2, 0,
- 228, 128, 3, 0, 255, 128, 4, 0, 0, 4, 5, 0, 7, 128, 4,
- 0, 228, 128, 4, 0, 0, 160, 4, 0, 85, 160, 4, 0, 0, 4,
- 5, 0, 7, 128, 5, 0, 228, 128, 4, 0, 228, 128, 3, 0, 255,
- 160, 5, 0, 0, 3, 5, 0, 7, 128, 4, 0, 228, 128, 5, 0,
- 228, 128, 7, 0, 0, 2, 4, 0, 8, 128, 4, 0, 85, 128, 6,
- 0, 0, 2, 4, 0, 8, 128, 4, 0, 255, 128, 88, 0, 0, 4,
- 4, 0, 8, 128, 3, 0, 0, 128, 5, 0, 85, 128, 4, 0, 255,
- 128, 4, 0, 0, 4, 4, 0, 8, 128, 2, 0, 85, 128, 3, 0,
- 255, 129, 4, 0, 255, 128, 6, 0, 0, 2, 3, 0, 1, 128, 1,
- 0, 255, 128, 5, 0, 0, 3, 6, 0, 7, 128, 1, 0, 228, 128,
- 3, 0, 0, 128, 4, 0, 0, 4, 7, 0, 7, 128, 6, 0, 228,
- 128, 3, 0, 85, 160, 3, 0, 170, 160, 4, 0, 0, 4, 4, 0,
- 8, 128, 7, 0, 85, 128, 4, 0, 255, 128, 4, 0, 85, 128, 4,
- 0, 0, 4, 8, 0, 7, 128, 1, 0, 228, 128, 3, 0, 0, 129,
- 3, 0, 0, 160, 4, 0, 0, 4, 9, 0, 15, 128, 2, 0, 36,
- 128, 3, 0, 255, 129, 2, 0, 192, 160, 4, 0, 0, 4, 10, 0,
- 7, 128, 6, 0, 228, 128, 4, 0, 170, 161, 4, 0, 255, 160, 5,
- 0, 0, 3, 10, 0, 7, 128, 4, 0, 228, 128, 10, 0, 228, 128,
- 4, 0, 0, 4, 10, 0, 7, 128, 10, 0, 228, 128, 9, 0, 228,
- 129, 4, 0, 228, 128, 88, 0, 0, 4, 11, 0, 2, 128, 8, 0,
- 85, 128, 10, 0, 85, 128, 4, 0, 255, 128, 7, 0, 0, 2, 4,
- 0, 8, 128, 4, 0, 170, 128, 6, 0, 0, 2, 4, 0, 8, 128,
- 4, 0, 255, 128, 88, 0, 0, 4, 4, 0, 8, 128, 3, 0, 85,
- 128, 5, 0, 170, 128, 4, 0, 255, 128, 4, 0, 0, 4, 4, 0,
- 8, 128, 2, 0, 170, 128, 3, 0, 255, 129, 4, 0, 255, 128, 4,
- 0, 0, 4, 4, 0, 8, 128, 7, 0, 170, 128, 4, 0, 255, 128,
- 4, 0, 170, 128, 88, 0, 0, 4, 11, 0, 4, 128, 8, 0, 170,
- 128, 10, 0, 170, 128, 4, 0, 255, 128, 7, 0, 0, 2, 4, 0,
- 8, 128, 4, 0, 0, 128, 6, 0, 0, 2, 4, 0, 8, 128, 4,
- 0, 255, 128, 88, 0, 0, 4, 4, 0, 8, 128, 9, 0, 255, 128,
- 5, 0, 0, 128, 4, 0, 255, 128, 4, 0, 0, 4, 4, 0, 8,
- 128, 2, 0, 0, 128, 3, 0, 255, 129, 4, 0, 255, 128, 4, 0,
- 0, 4, 2, 0, 7, 128, 2, 0, 228, 128, 3, 0, 255, 128, 2,
- 0, 170, 160, 5, 0, 0, 3, 2, 0, 7, 128, 2, 0, 228, 128,
- 2, 0, 228, 128, 4, 0, 0, 4, 4, 0, 8, 128, 7, 0, 0,
- 128, 4, 0, 255, 128, 4, 0, 0, 128, 2, 0, 0, 3, 3, 0,
- 14, 128, 7, 0, 144, 129, 2, 0, 0, 160, 4, 0, 0, 4, 3,
- 0, 14, 128, 9, 0, 144, 128, 3, 0, 228, 129, 2, 0, 0, 160,
- 88, 0, 0, 4, 11, 0, 1, 128, 8, 0, 0, 128, 10, 0, 0,
- 128, 4, 0, 255, 128, 4, 0, 0, 4, 5, 0, 7, 128, 1, 0,
- 228, 128, 3, 0, 0, 128, 4, 0, 228, 129, 4, 0, 0, 4, 7,
- 0, 7, 128, 1, 0, 228, 128, 3, 0, 0, 128, 4, 0, 228, 128,
- 35, 0, 0, 2, 5, 0, 7, 128, 5, 0, 228, 128, 5, 0, 0,
- 3, 10, 0, 7, 128, 4, 0, 228, 128, 6, 0, 228, 128, 4, 0,
- 0, 4, 7, 0, 7, 128, 10, 0, 228, 128, 3, 0, 85, 161, 7,
- 0, 228, 128, 88, 0, 0, 4, 5, 0, 7, 128, 0, 0, 255, 129,
- 5, 0, 228, 128, 7, 0, 228, 128, 88, 0, 0, 4, 5, 0, 7,
- 128, 0, 0, 170, 129, 11, 0, 228, 128, 5, 0, 228, 128, 2, 0,
- 0, 3, 7, 0, 7, 128, 6, 0, 228, 128, 6, 0, 228, 128, 5,
- 0, 0, 3, 4, 0, 7, 128, 4, 0, 228, 128, 7, 0, 228, 128,
- 88, 0, 0, 4, 3, 0, 7, 128, 8, 0, 228, 128, 4, 0, 228,
- 128, 3, 0, 249, 128, 88, 0, 0, 4, 0, 0, 14, 128, 0, 0,
- 85, 129, 3, 0, 144, 128, 5, 0, 144, 128, 6, 0, 0, 2, 6,
- 0, 8, 128, 6, 0, 0, 128, 4, 0, 0, 4, 6, 0, 8, 128,
- 9, 0, 0, 128, 6, 0, 255, 129, 2, 0, 0, 160, 11, 0, 0,
- 3, 3, 0, 1, 128, 6, 0, 255, 128, 2, 0, 85, 160, 5, 0,
- 0, 3, 3, 0, 14, 128, 6, 0, 144, 128, 6, 0, 144, 128, 88,
- 0, 0, 4, 6, 0, 8, 128, 3, 0, 85, 129, 2, 0, 85, 160,
- 3, 0, 0, 128, 88, 0, 0, 4, 4, 0, 1, 128, 2, 0, 0,
- 129, 2, 0, 0, 160, 6, 0, 255, 128, 6, 0, 0, 2, 4, 0,
- 8, 128, 6, 0, 85, 128, 4, 0, 0, 4, 4, 0, 8, 128, 9,
- 0, 85, 128, 4, 0, 255, 129, 2, 0, 0, 160, 11, 0, 0, 3,
- 6, 0, 8, 128, 4, 0, 255, 128, 2, 0, 85, 160, 88, 0, 0,
- 4, 4, 0, 8, 128, 3, 0, 170, 129, 2, 0, 85, 160, 6, 0,
- 255, 128, 88, 0, 0, 4, 4, 0, 2, 128, 2, 0, 85, 129, 2,
- 0, 0, 160, 4, 0, 255, 128, 6, 0, 0, 2, 4, 0, 8, 128,
- 6, 0, 170, 128, 4, 0, 0, 4, 4, 0, 8, 128, 9, 0, 170,
- 128, 4, 0, 255, 129, 2, 0, 0, 160, 11, 0, 0, 3, 6, 0,
- 8, 128, 4, 0, 255, 128, 2, 0, 85, 160, 88, 0, 0, 4, 4,
- 0, 8, 128, 3, 0, 255, 129, 2, 0, 85, 160, 6, 0, 255, 128,
- 88, 0, 0, 4, 4, 0, 4, 128, 2, 0, 170, 129, 2, 0, 0,
- 160, 4, 0, 255, 128, 88, 0, 0, 4, 0, 0, 7, 128, 0, 0,
- 0, 129, 4, 0, 228, 128, 0, 0, 249, 128, 18, 0, 0, 4, 3,
- 0, 7, 128, 2, 0, 255, 128, 0, 0, 228, 128, 6, 0, 228, 128,
- 5, 0, 0, 3, 3, 0, 8, 128, 2, 0, 255, 128, 2, 0, 255,
- 128, 88, 0, 0, 4, 3, 0, 8, 128, 3, 0, 255, 129, 2, 0,
- 0, 160, 2, 0, 85, 160, 5, 0, 0, 3, 0, 0, 7, 128, 1,
- 0, 255, 128, 3, 0, 228, 128, 5, 0, 0, 3, 0, 0, 8, 128,
- 1, 0, 255, 128, 1, 0, 255, 128, 88, 0, 0, 4, 0, 0, 8,
- 128, 0, 0, 255, 129, 2, 0, 0, 160, 2, 0, 85, 160, 2, 0,
- 0, 3, 0, 0, 8, 128, 3, 0, 255, 128, 0, 0, 255, 128, 88,
- 0, 0, 4, 1, 0, 7, 128, 0, 0, 255, 129, 0, 0, 228, 128,
- 1, 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128, 1, 0, 228,
- 128, 255, 255, 0, 0, 83, 72, 68, 82, 108, 8, 0, 0, 64, 0,
- 0, 0, 27, 2, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0,
- 0, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0,
- 0, 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85,
- 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85,
- 85, 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0,
- 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0, 0, 104, 0, 0,
- 2, 7, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 0, 0,
- 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0,
- 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 69, 0, 0, 9,
- 242, 0, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 1, 0, 0,
- 0, 70, 126, 16, 0, 1, 0, 0, 0, 0, 96, 16, 0, 1, 0,
- 0, 0, 24, 0, 0, 7, 18, 0, 16, 0, 2, 0, 0, 0, 58,
- 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0,
- 24, 0, 0, 7, 34, 0, 16, 0, 2, 0, 0, 0, 58, 0, 16,
- 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 60, 0,
- 0, 7, 18, 0, 16, 0, 2, 0, 0, 0, 26, 0, 16, 0, 2,
- 0, 0, 0, 10, 0, 16, 0, 2, 0, 0, 0, 31, 0, 4, 3,
- 10, 0, 16, 0, 2, 0, 0, 0, 54, 0, 0, 5, 242, 32, 16,
- 0, 0, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 62, 0,
- 0, 1, 21, 0, 0, 1, 14, 0, 0, 7, 114, 0, 16, 0, 0,
- 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 246, 15, 16, 0,
- 0, 0, 0, 0, 14, 0, 0, 7, 114, 0, 16, 0, 1, 0, 0,
- 0, 70, 2, 16, 0, 1, 0, 0, 0, 246, 15, 16, 0, 1, 0,
- 0, 0, 32, 0, 0, 8, 18, 0, 16, 0, 2, 0, 0, 0, 10,
- 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0,
- 7, 0, 0, 0, 31, 0, 4, 3, 10, 0, 16, 0, 2, 0, 0,
- 0, 24, 0, 0, 10, 114, 0, 16, 0, 2, 0, 0, 0, 70, 2,
- 16, 0, 1, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63, 0,
- 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 24, 0, 0, 10,
- 114, 0, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0,
- 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 114, 0, 16, 0, 4,
- 0, 0, 0, 70, 2, 16, 128, 65, 0, 0, 0, 1, 0, 0, 0,
- 2, 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128,
- 63, 0, 0, 0, 0, 14, 0, 0, 7, 114, 0, 16, 0, 4, 0,
- 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 0,
- 0, 0, 0, 51, 0, 0, 10, 114, 0, 16, 0, 4, 0, 0, 0,
- 70, 2, 16, 0, 4, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128,
- 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0,
- 0, 11, 114, 0, 16, 0, 4, 0, 0, 0, 70, 2, 16, 128, 65,
- 0, 0, 0, 4, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63,
- 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 55, 0, 0,
- 12, 114, 0, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 3, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0,
- 55, 0, 0, 12, 114, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16,
- 0, 2, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63, 0, 0,
- 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 70, 2, 16, 0, 3,
- 0, 0, 0, 18, 0, 0, 1, 32, 0, 0, 8, 130, 0, 16, 0,
- 2, 0, 0, 0, 10, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 64, 0, 0, 8, 0, 0, 0, 31, 0, 4, 3, 58, 0,
- 16, 0, 2, 0, 0, 0, 29, 0, 0, 10, 114, 0, 16, 0, 3,
- 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 70, 2,
- 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 56,
- 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0,
- 1, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 50, 0, 0,
- 15, 114, 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 0,
- 0, 0, 64, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 191,
- 0, 0, 128, 191, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0,
- 11, 114, 0, 16, 0, 6, 0, 0, 0, 70, 2, 16, 128, 65, 0,
- 0, 0, 1, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63, 0,
- 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 11,
- 114, 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 128, 65, 0, 0,
- 0, 5, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63, 0, 0,
- 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 50, 0, 0, 13, 114,
- 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 128, 65, 0, 0, 0,
- 6, 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0, 2, 64, 0,
- 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0,
- 0, 0, 55, 0, 0, 9, 114, 0, 16, 0, 2, 0, 0, 0, 70,
- 2, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0,
- 70, 2, 16, 0, 5, 0, 0, 0, 18, 0, 0, 1, 32, 0, 0,
- 8, 130, 0, 16, 0, 2, 0, 0, 0, 10, 128, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 9, 0, 0, 0, 31,
- 0, 4, 3, 58, 0, 16, 0, 2, 0, 0, 0, 29, 0, 0, 10,
- 114, 0, 16, 0, 3, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128,
- 62, 0, 0, 128, 62, 0, 0, 128, 62, 0, 0, 0, 0, 70, 2,
- 16, 0, 1, 0, 0, 0, 50, 0, 0, 15, 114, 0, 16, 0, 4,
- 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 2, 64, 0, 0,
- 0, 0, 128, 65, 0, 0, 128, 65, 0, 0, 128, 65, 0, 0, 0,
- 0, 2, 64, 0, 0, 0, 0, 64, 193, 0, 0, 64, 193, 0, 0,
- 64, 193, 0, 0, 0, 0, 50, 0, 0, 12, 114, 0, 16, 0, 4,
- 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0,
- 1, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 64, 0, 0, 128,
- 64, 0, 0, 128, 64, 0, 0, 0, 0, 56, 0, 0, 7, 114, 0,
- 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 70,
- 2, 16, 0, 4, 0, 0, 0, 75, 0, 0, 5, 114, 0, 16, 0,
- 5, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 55, 0, 0,
- 9, 114, 0, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 3, 0,
- 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 5,
- 0, 0, 0, 29, 0, 0, 10, 114, 0, 16, 0, 4, 0, 0, 0,
- 2, 64, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0,
- 63, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 50, 0,
- 0, 16, 114, 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 64,
- 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 0, 2, 64, 0,
- 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0,
- 0, 0, 56, 0, 0, 7, 114, 0, 16, 0, 5, 0, 0, 0, 70,
- 2, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0,
- 0, 0, 0, 11, 114, 0, 16, 0, 6, 0, 0, 0, 70, 2, 16,
- 128, 65, 0, 0, 0, 1, 0, 0, 0, 2, 64, 0, 0, 0, 0,
- 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 50,
- 0, 0, 10, 114, 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 128,
- 65, 0, 0, 0, 5, 0, 0, 0, 70, 2, 16, 0, 6, 0, 0,
- 0, 70, 2, 16, 0, 1, 0, 0, 0, 50, 0, 0, 15, 114, 0,
- 16, 0, 6, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64,
- 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 191, 0, 0, 128,
- 191, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 8, 114, 0,
- 16, 0, 3, 0, 0, 0, 70, 2, 16, 128, 65, 0, 0, 0, 1,
- 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0, 50, 0, 0, 9,
- 114, 0, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 6, 0, 0,
- 0, 70, 2, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 1, 0,
- 0, 0, 55, 0, 0, 9, 114, 0, 16, 0, 2, 0, 0, 0, 70,
- 2, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0,
- 70, 2, 16, 0, 3, 0, 0, 0, 18, 0, 0, 1, 32, 0, 0,
- 8, 130, 0, 16, 0, 2, 0, 0, 0, 10, 128, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 10, 0, 0, 0, 0,
- 0, 0, 8, 114, 0, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0,
- 0, 0, 0, 0, 70, 2, 16, 128, 65, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 70, 2,
- 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 56,
- 0, 0, 7, 114, 0, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0,
- 0, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 50, 0, 0,
- 13, 114, 0, 16, 0, 1, 0, 0, 0, 70, 2, 16, 128, 65, 0,
- 0, 0, 1, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 64, 0,
- 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 0, 70, 2, 16, 0,
- 4, 0, 0, 0, 55, 0, 0, 10, 114, 0, 16, 0, 2, 0, 0,
- 0, 246, 15, 16, 0, 2, 0, 0, 0, 70, 2, 16, 128, 129, 0,
- 0, 0, 3, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 21,
- 0, 0, 1, 21, 0, 0, 1, 21, 0, 0, 1, 0, 0, 0, 8,
- 18, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 128, 65, 0, 0,
- 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 56, 0,
- 0, 7, 226, 0, 16, 0, 1, 0, 0, 0, 246, 15, 16, 0, 1,
- 0, 0, 0, 6, 9, 16, 0, 2, 0, 0, 0, 50, 0, 0, 9,
- 114, 0, 16, 0, 0, 0, 0, 0, 6, 0, 16, 0, 1, 0, 0,
- 0, 70, 2, 16, 0, 0, 0, 0, 0, 150, 7, 16, 0, 1, 0,
- 0, 0, 56, 0, 0, 7, 114, 32, 16, 0, 0, 0, 0, 0, 246,
- 15, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0,
- 54, 0, 0, 5, 130, 32, 16, 0, 0, 0, 0, 0, 58, 0, 16,
- 0, 0, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0,
- 0, 0, 66, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 38, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0,
- 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68,
- 69, 70, 100, 1, 0, 0, 1, 0, 0, 0, 232, 0, 0, 0, 5,
- 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0,
- 48, 1, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 2, 0, 0,
- 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 213, 0, 0, 0, 2,
- 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255,
- 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 220, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 115,
- 83, 97, 109, 112, 108, 101, 114, 0, 115, 66, 99, 107, 83, 97, 109,
- 112, 108, 101, 114, 0, 116, 101, 120, 0, 98, 99, 107, 116, 101, 120,
- 0, 36, 71, 108, 111, 98, 97, 108, 115, 0, 171, 171, 171, 220, 0,
- 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 2, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0,
- 0, 98, 108, 101, 110, 100, 111, 112, 0, 0, 0, 19, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 105, 99, 114, 111,
- 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83,
- 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32,
- 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0,
- 171, 171, 73, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8,
- 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0,
- 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0,
- 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88,
- 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83, 71, 78, 44, 0,
- 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171,
- 171, 203, 34, 0, 0, 0, 0, 0, 0, 83, 97, 109, 112, 108, 101,
- 84, 101, 120, 116, 117, 114, 101, 70, 111, 114, 78, 111, 110, 83, 101,
- 112, 97, 114, 97, 98, 108, 101, 66, 108, 101, 110, 100, 105, 110, 103,
- 0, 68, 4, 0, 0, 68, 88, 66, 67, 77, 85, 167, 240, 56, 56,
- 155, 78, 125, 96, 49, 253, 103, 100, 22, 62, 1, 0, 0, 0, 68,
- 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 248, 0, 0, 0,
- 244, 1, 0, 0, 112, 2, 0, 0, 160, 3, 0, 0, 212, 3, 0,
- 0, 65, 111, 110, 57, 184, 0, 0, 0, 184, 0, 0, 0, 0, 2,
- 254, 255, 132, 0, 0, 0, 52, 0, 0, 0, 1, 0, 36, 0, 0,
- 0, 48, 0, 0, 0, 48, 0, 0, 0, 36, 0, 1, 0, 48, 0,
- 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 254, 255, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0,
- 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4, 0, 0, 4,
- 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160, 2, 0, 228,
- 160, 4, 0, 0, 4, 0, 0, 12, 224, 0, 0, 20, 144, 3, 0,
- 180, 160, 3, 0, 20, 160, 4, 0, 0, 4, 0, 0, 3, 128, 0,
- 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0, 0, 3,
- 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160, 1, 0, 0,
- 2, 0, 0, 12, 192, 4, 0, 68, 160, 255, 255, 0, 0, 83, 72,
- 68, 82, 244, 0, 0, 0, 64, 0, 1, 0, 61, 0, 0, 0, 89,
- 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0, 0,
- 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101, 0,
- 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 194,
- 32, 16, 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0,
- 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0, 0,
- 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50, 32, 16,
- 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138,
- 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 11, 194, 32, 16, 0,
- 1, 0, 0, 0, 6, 20, 16, 0, 0, 0, 0, 0, 166, 142, 32,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 132, 32, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
- 68, 69, 70, 40, 1, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0,
- 1, 0, 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0,
- 0, 246, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 60, 0, 0, 0,
- 4, 0, 0, 0, 88, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 212,
- 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0,
- 196, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 32, 0, 0,
- 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0,
- 0, 0, 236, 0, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100,
- 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111,
- 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114,
- 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 77, 105,
- 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83,
- 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108,
- 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51,
- 56, 52, 0, 73, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0,
- 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79,
- 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83, 71, 78, 104,
- 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12, 0, 0, 92,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105,
- 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171,
- 171, 171, 84, 52, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 216, 37, 0, 0, 68, 88, 66, 67,
- 205, 124, 125, 227, 208, 119, 203, 250, 120, 38, 135, 194, 158, 189, 85,
- 176, 1, 0, 0, 0, 216, 37, 0, 0, 6, 0, 0, 0, 56, 0,
- 0, 0, 72, 13, 0, 0, 76, 35, 0, 0, 200, 35, 0, 0, 52,
- 37, 0, 0, 164, 37, 0, 0, 65, 111, 110, 57, 8, 13, 0, 0,
- 8, 13, 0, 0, 0, 2, 255, 255, 208, 12, 0, 0, 56, 0, 0,
- 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0, 56, 0, 2, 0,
- 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 2, 255, 255,
- 81, 0, 0, 5, 1, 0, 15, 160, 0, 0, 64, 193, 0, 0, 80,
- 193, 0, 0, 96, 193, 0, 0, 0, 0, 81, 0, 0, 5, 2, 0,
- 15, 160, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 81, 0, 0, 5, 3, 0, 15, 160, 154, 153, 153, 62,
- 61, 10, 23, 63, 174, 71, 225, 61, 0, 0, 0, 0, 31, 0, 0,
- 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0,
- 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1,
- 8, 15, 160, 1, 0, 0, 2, 0, 0, 2, 128, 2, 0, 85, 160,
- 1, 0, 0, 2, 1, 0, 2, 128, 2, 0, 85, 160, 1, 0, 0,
- 2, 2, 0, 4, 128, 2, 0, 85, 160, 66, 0, 0, 3, 3, 0,
- 15, 128, 0, 0, 228, 176, 1, 8, 228, 160, 66, 0, 0, 3, 4,
- 0, 15, 128, 0, 0, 228, 176, 0, 8, 228, 160, 6, 0, 0, 2,
- 0, 0, 8, 128, 4, 0, 255, 128, 5, 0, 0, 3, 5, 0, 7,
- 128, 0, 0, 255, 128, 4, 0, 228, 128, 4, 0, 0, 4, 6, 0,
- 3, 128, 4, 0, 225, 128, 0, 0, 255, 128, 5, 0, 230, 129, 88,
- 0, 0, 4, 7, 0, 3, 128, 6, 0, 0, 128, 5, 0, 233, 128,
- 5, 0, 230, 128, 11, 0, 0, 3, 1, 0, 8, 128, 5, 0, 0,
- 128, 7, 0, 0, 128, 10, 0, 0, 3, 2, 0, 8, 128, 7, 0,
- 85, 128, 5, 0, 0, 128, 2, 0, 0, 3, 7, 0, 8, 128, 1,
- 0, 255, 128, 2, 0, 255, 129, 6, 0, 0, 2, 1, 0, 8, 128,
- 3, 0, 255, 128, 5, 0, 0, 3, 8, 0, 7, 128, 1, 0, 255,
- 128, 3, 0, 228, 128, 4, 0, 0, 4, 9, 0, 3, 128, 3, 0,
- 0, 128, 1, 0, 255, 128, 8, 0, 230, 129, 6, 0, 0, 2, 2,
- 0, 8, 128, 9, 0, 85, 128, 5, 0, 0, 3, 2, 0, 8, 128,
- 2, 0, 255, 128, 7, 0, 255, 128, 4, 0, 0, 4, 10, 0, 15,
- 128, 3, 0, 150, 128, 1, 0, 255, 128, 8, 0, 96, 129, 5, 0,
- 0, 3, 7, 0, 2, 128, 2, 0, 255, 128, 10, 0, 255, 128, 1,
- 0, 0, 2, 9, 0, 12, 128, 10, 0, 228, 128, 88, 0, 0, 4,
- 1, 0, 5, 128, 9, 0, 85, 129, 9, 0, 245, 128, 7, 0, 215,
- 128, 6, 0, 0, 2, 2, 0, 8, 128, 9, 0, 0, 128, 5, 0,
- 0, 3, 2, 0, 8, 128, 2, 0, 255, 128, 7, 0, 255, 128, 5,
- 0, 0, 3, 7, 0, 1, 128, 2, 0, 255, 128, 9, 0, 170, 128,
- 88, 0, 0, 4, 2, 0, 3, 128, 9, 0, 0, 129, 9, 0, 232,
- 128, 7, 0, 227, 128, 88, 0, 0, 4, 1, 0, 7, 128, 9, 0,
- 255, 128, 1, 0, 228, 128, 2, 0, 228, 128, 6, 0, 0, 2, 5,
- 0, 8, 128, 9, 0, 255, 128, 5, 0, 0, 3, 5, 0, 8, 128,
- 5, 0, 255, 128, 7, 0, 255, 128, 5, 0, 0, 3, 7, 0, 4,
- 128, 5, 0, 255, 128, 9, 0, 85, 128, 88, 0, 0, 4, 0, 0,
- 5, 128, 10, 0, 255, 129, 9, 0, 245, 128, 7, 0, 246, 128, 88,
- 0, 0, 4, 0, 0, 7, 128, 10, 0, 0, 128, 0, 0, 228, 128,
- 1, 0, 228, 128, 1, 0, 0, 2, 1, 0, 1, 128, 2, 0, 85,
- 160, 1, 0, 0, 2, 2, 0, 1, 128, 2, 0, 85, 160, 1, 0,
- 0, 2, 11, 0, 4, 128, 2, 0, 85, 160, 6, 0, 0, 2, 2,
- 0, 8, 128, 9, 0, 170, 128, 5, 0, 0, 3, 2, 0, 8, 128,
- 2, 0, 255, 128, 7, 0, 255, 128, 5, 0, 0, 3, 7, 0, 1,
- 128, 2, 0, 255, 128, 9, 0, 0, 128, 88, 0, 0, 4, 11, 0,
- 3, 128, 10, 0, 170, 129, 9, 0, 232, 128, 7, 0, 236, 128, 6,
- 0, 0, 2, 2, 0, 8, 128, 10, 0, 85, 128, 5, 0, 0, 3,
- 2, 0, 8, 128, 2, 0, 255, 128, 7, 0, 255, 128, 5, 0, 0,
- 3, 7, 0, 2, 128, 2, 0, 255, 128, 10, 0, 0, 128, 88, 0,
- 0, 4, 2, 0, 6, 128, 10, 0, 85, 129, 10, 0, 196, 128, 7,
- 0, 220, 128, 88, 0, 0, 4, 2, 0, 7, 128, 10, 0, 0, 128,
- 2, 0, 228, 128, 11, 0, 228, 128, 6, 0, 0, 2, 2, 0, 8,
- 128, 10, 0, 0, 128, 5, 0, 0, 3, 2, 0, 8, 128, 2, 0,
- 255, 128, 7, 0, 255, 128, 5, 0, 0, 3, 7, 0, 4, 128, 2,
- 0, 255, 128, 10, 0, 85, 128, 88, 0, 0, 4, 1, 0, 6, 128,
- 10, 0, 0, 129, 10, 0, 196, 128, 7, 0, 248, 128, 88, 0, 0,
- 4, 1, 0, 7, 128, 9, 0, 255, 128, 1, 0, 228, 128, 2, 0,
- 228, 128, 88, 0, 0, 4, 0, 0, 7, 128, 10, 0, 85, 128, 1,
- 0, 228, 128, 0, 0, 228, 128, 88, 0, 0, 4, 1, 0, 3, 128,
- 9, 0, 170, 128, 8, 0, 233, 128, 8, 0, 230, 128, 8, 0, 0,
- 3, 5, 0, 8, 128, 0, 0, 228, 128, 3, 0, 228, 160, 8, 0,
- 0, 3, 1, 0, 4, 128, 8, 0, 228, 128, 3, 0, 228, 160, 2,
- 0, 0, 3, 5, 0, 8, 128, 5, 0, 255, 129, 1, 0, 170, 128,
- 2, 0, 0, 3, 0, 0, 7, 128, 0, 0, 228, 128, 5, 0, 255,
- 128, 2, 0, 0, 3, 5, 0, 8, 128, 0, 0, 85, 129, 0, 0,
- 0, 128, 88, 0, 0, 4, 2, 0, 3, 128, 5, 0, 255, 128, 0,
- 0, 225, 128, 0, 0, 228, 128, 10, 0, 0, 3, 5, 0, 8, 128,
- 0, 0, 170, 128, 2, 0, 0, 128, 11, 0, 0, 3, 7, 0, 1,
- 128, 2, 0, 85, 128, 0, 0, 170, 128, 8, 0, 0, 3, 2, 0,
- 1, 128, 0, 0, 228, 128, 3, 0, 228, 160, 2, 0, 0, 3, 2,
- 0, 2, 128, 5, 0, 255, 129, 2, 0, 0, 128, 6, 0, 0, 2,
- 2, 0, 2, 128, 2, 0, 85, 128, 2, 0, 0, 3, 7, 0, 14,
- 128, 0, 0, 144, 128, 2, 0, 0, 129, 5, 0, 0, 3, 7, 0,
- 14, 128, 2, 0, 0, 128, 7, 0, 228, 128, 4, 0, 0, 4, 2,
- 0, 14, 128, 7, 0, 228, 128, 2, 0, 85, 128, 2, 0, 0, 128,
- 88, 0, 0, 4, 0, 0, 7, 128, 5, 0, 255, 128, 0, 0, 228,
- 128, 2, 0, 249, 128, 2, 0, 0, 3, 2, 0, 14, 128, 2, 0,
- 0, 129, 0, 0, 144, 128, 2, 0, 0, 3, 5, 0, 8, 128, 2,
- 0, 0, 129, 2, 0, 0, 160, 5, 0, 0, 3, 2, 0, 14, 128,
- 2, 0, 228, 128, 5, 0, 255, 128, 2, 0, 0, 3, 5, 0, 8,
- 128, 2, 0, 0, 129, 7, 0, 0, 128, 2, 0, 0, 3, 7, 0,
- 1, 128, 7, 0, 0, 129, 2, 0, 0, 160, 6, 0, 0, 2, 5,
- 0, 8, 128, 5, 0, 255, 128, 4, 0, 0, 4, 2, 0, 7, 128,
- 2, 0, 249, 128, 5, 0, 255, 128, 2, 0, 0, 128, 88, 0, 0,
- 4, 0, 0, 7, 128, 7, 0, 0, 128, 0, 0, 228, 128, 2, 0,
- 228, 128, 8, 0, 0, 3, 5, 0, 8, 128, 5, 0, 228, 128, 3,
- 0, 228, 160, 2, 0, 0, 3, 2, 0, 1, 128, 1, 0, 170, 128,
- 5, 0, 255, 129, 2, 0, 0, 3, 5, 0, 8, 128, 1, 0, 170,
- 129, 5, 0, 255, 128, 4, 0, 0, 4, 2, 0, 14, 128, 3, 0,
- 144, 128, 1, 0, 255, 128, 5, 0, 255, 128, 4, 0, 0, 4, 3,
- 0, 7, 128, 4, 0, 228, 128, 0, 0, 255, 128, 2, 0, 0, 128,
- 4, 0, 0, 4, 7, 0, 15, 128, 4, 0, 38, 128, 0, 0, 255,
- 128, 5, 0, 144, 129, 2, 0, 0, 3, 0, 0, 8, 128, 3, 0,
- 85, 129, 3, 0, 0, 128, 88, 0, 0, 4, 8, 0, 6, 128, 0,
- 0, 255, 128, 3, 0, 196, 128, 3, 0, 208, 128, 10, 0, 0, 3,
- 0, 0, 8, 128, 3, 0, 170, 128, 8, 0, 85, 128, 11, 0, 0,
- 3, 1, 0, 8, 128, 8, 0, 170, 128, 3, 0, 170, 128, 8, 0,
- 0, 3, 5, 0, 8, 128, 3, 0, 228, 128, 3, 0, 228, 160, 2,
- 0, 0, 3, 2, 0, 1, 128, 0, 0, 255, 129, 5, 0, 255, 128,
- 6, 0, 0, 2, 2, 0, 1, 128, 2, 0, 0, 128, 2, 0, 0,
- 3, 8, 0, 14, 128, 3, 0, 144, 128, 5, 0, 255, 129, 5, 0,
- 0, 3, 8, 0, 14, 128, 5, 0, 255, 128, 8, 0, 228, 128, 4,
- 0, 0, 4, 8, 0, 14, 128, 8, 0, 228, 128, 2, 0, 0, 128,
- 5, 0, 255, 128, 88, 0, 0, 4, 3, 0, 7, 128, 0, 0, 255,
- 128, 3, 0, 228, 128, 8, 0, 249, 128, 2, 0, 0, 3, 8, 0,
- 14, 128, 5, 0, 255, 129, 3, 0, 144, 128, 2, 0, 0, 3, 0,
- 0, 8, 128, 5, 0, 255, 129, 2, 0, 0, 160, 5, 0, 0, 3,
- 8, 0, 14, 128, 0, 0, 255, 128, 8, 0, 228, 128, 2, 0, 0,
- 3, 0, 0, 8, 128, 1, 0, 255, 128, 5, 0, 255, 129, 2, 0,
- 0, 3, 1, 0, 8, 128, 1, 0, 255, 129, 2, 0, 0, 160, 6,
- 0, 0, 2, 0, 0, 8, 128, 0, 0, 255, 128, 4, 0, 0, 4,
- 8, 0, 14, 128, 8, 0, 228, 128, 0, 0, 255, 128, 5, 0, 255,
- 128, 88, 0, 0, 4, 3, 0, 7, 128, 1, 0, 255, 128, 3, 0,
- 228, 128, 8, 0, 249, 128, 2, 0, 0, 3, 0, 0, 8, 128, 2,
- 0, 170, 129, 2, 0, 85, 128, 88, 0, 0, 4, 8, 0, 6, 128,
- 0, 0, 255, 128, 2, 0, 216, 128, 2, 0, 228, 128, 10, 0, 0,
- 3, 0, 0, 8, 128, 2, 0, 255, 128, 8, 0, 85, 128, 11, 0,
- 0, 3, 1, 0, 8, 128, 8, 0, 170, 128, 2, 0, 255, 128, 8,
- 0, 0, 3, 5, 0, 8, 128, 2, 0, 249, 128, 3, 0, 228, 160,
- 2, 0, 0, 3, 2, 0, 1, 128, 0, 0, 255, 129, 5, 0, 255,
- 128, 6, 0, 0, 2, 2, 0, 1, 128, 2, 0, 0, 128, 2, 0,
- 0, 3, 8, 0, 14, 128, 2, 0, 228, 128, 5, 0, 255, 129, 5,
- 0, 0, 3, 8, 0, 14, 128, 5, 0, 255, 128, 8, 0, 228, 128,
- 4, 0, 0, 4, 8, 0, 14, 128, 8, 0, 228, 128, 2, 0, 0,
- 128, 5, 0, 255, 128, 88, 0, 0, 4, 2, 0, 7, 128, 0, 0,
- 255, 128, 2, 0, 249, 128, 8, 0, 249, 128, 2, 0, 0, 3, 8,
- 0, 14, 128, 5, 0, 255, 129, 2, 0, 144, 128, 2, 0, 0, 3,
- 0, 0, 8, 128, 5, 0, 255, 129, 2, 0, 0, 160, 5, 0, 0,
- 3, 8, 0, 14, 128, 0, 0, 255, 128, 8, 0, 228, 128, 2, 0,
- 0, 3, 0, 0, 8, 128, 1, 0, 255, 128, 5, 0, 255, 129, 2,
- 0, 0, 3, 1, 0, 8, 128, 1, 0, 255, 129, 2, 0, 0, 160,
- 6, 0, 0, 2, 0, 0, 8, 128, 0, 0, 255, 128, 4, 0, 0,
- 4, 8, 0, 14, 128, 8, 0, 228, 128, 0, 0, 255, 128, 5, 0,
- 255, 128, 88, 0, 0, 4, 2, 0, 7, 128, 1, 0, 255, 128, 2,
- 0, 228, 128, 8, 0, 249, 128, 1, 0, 0, 2, 0, 0, 8, 128,
- 0, 0, 0, 160, 2, 0, 0, 3, 8, 0, 14, 128, 0, 0, 255,
- 128, 1, 0, 144, 160, 5, 0, 0, 3, 8, 0, 14, 128, 8, 0,
- 228, 128, 8, 0, 228, 128, 88, 0, 0, 4, 2, 0, 7, 128, 8,
- 0, 255, 129, 3, 0, 228, 128, 2, 0, 228, 128, 88, 0, 0, 4,
- 0, 0, 7, 128, 8, 0, 170, 129, 0, 0, 228, 128, 2, 0, 228,
- 128, 1, 0, 0, 2, 2, 0, 2, 128, 2, 0, 85, 160, 1, 0,
- 0, 2, 3, 0, 2, 128, 2, 0, 85, 160, 1, 0, 0, 2, 9,
- 0, 4, 128, 2, 0, 85, 160, 11, 0, 0, 3, 0, 0, 8, 128,
- 8, 0, 0, 128, 1, 0, 0, 128, 10, 0, 0, 3, 2, 0, 8,
- 128, 1, 0, 85, 128, 8, 0, 0, 128, 2, 0, 0, 3, 10, 0,
- 8, 128, 0, 0, 255, 128, 2, 0, 255, 129, 6, 0, 0, 2, 0,
- 0, 8, 128, 7, 0, 255, 128, 5, 0, 0, 3, 0, 0, 8, 128,
- 0, 0, 255, 128, 10, 0, 255, 128, 5, 0, 0, 3, 10, 0, 1,
- 128, 0, 0, 255, 128, 6, 0, 0, 128, 1, 0, 0, 2, 6, 0,
- 12, 128, 7, 0, 180, 128, 88, 0, 0, 4, 9, 0, 3, 128, 7,
- 0, 255, 129, 6, 0, 226, 128, 10, 0, 227, 128, 6, 0, 0, 2,
- 0, 0, 8, 128, 6, 0, 85, 128, 5, 0, 0, 3, 0, 0, 8,
- 128, 0, 0, 255, 128, 10, 0, 255, 128, 5, 0, 0, 3, 10, 0,
- 2, 128, 0, 0, 255, 128, 7, 0, 170, 128, 88, 0, 0, 4, 3,
- 0, 5, 128, 6, 0, 85, 129, 6, 0, 245, 128, 10, 0, 215, 128,
- 88, 0, 0, 4, 1, 0, 11, 128, 7, 0, 170, 128, 3, 0, 164,
- 128, 9, 0, 164, 128, 6, 0, 0, 2, 0, 0, 8, 128, 7, 0,
- 170, 128, 5, 0, 0, 3, 0, 0, 8, 128, 0, 0, 255, 128, 10,
- 0, 255, 128, 5, 0, 0, 3, 10, 0, 4, 128, 0, 0, 255, 128,
- 6, 0, 85, 128, 88, 0, 0, 4, 2, 0, 5, 128, 7, 0, 170,
- 129, 6, 0, 245, 128, 10, 0, 246, 128, 88, 0, 0, 4, 1, 0,
- 11, 128, 7, 0, 0, 128, 2, 0, 164, 128, 1, 0, 228, 128, 1,
- 0, 0, 2, 2, 0, 1, 128, 2, 0, 85, 160, 1, 0, 0, 2,
- 3, 0, 4, 128, 2, 0, 85, 160, 6, 0, 0, 2, 0, 0, 8,
- 128, 6, 0, 0, 128, 5, 0, 0, 3, 0, 0, 8, 128, 0, 0,
- 255, 128, 10, 0, 255, 128, 5, 0, 0, 3, 10, 0, 1, 128, 0,
- 0, 255, 128, 7, 0, 255, 128, 88, 0, 0, 4, 3, 0, 3, 128,
- 6, 0, 0, 129, 6, 0, 226, 128, 10, 0, 236, 128, 6, 0, 0,
- 2, 0, 0, 8, 128, 7, 0, 85, 128, 5, 0, 0, 3, 0, 0,
- 8, 128, 0, 0, 255, 128, 10, 0, 255, 128, 5, 0, 0, 3, 10,
- 0, 2, 128, 0, 0, 255, 128, 7, 0, 0, 128, 88, 0, 0, 4,
- 2, 0, 6, 128, 7, 0, 85, 129, 7, 0, 196, 128, 10, 0, 220,
- 128, 88, 0, 0, 4, 2, 0, 7, 128, 7, 0, 0, 128, 2, 0,
- 228, 128, 3, 0, 228, 128, 1, 0, 0, 2, 3, 0, 1, 128, 2,
- 0, 85, 160, 6, 0, 0, 2, 0, 0, 8, 128, 7, 0, 0, 128,
- 5, 0, 0, 3, 0, 0, 8, 128, 0, 0, 255, 128, 10, 0, 255,
- 128, 5, 0, 0, 3, 10, 0, 4, 128, 0, 0, 255, 128, 7, 0,
- 85, 128, 88, 0, 0, 4, 3, 0, 6, 128, 7, 0, 0, 129, 7,
- 0, 196, 128, 10, 0, 248, 128, 88, 0, 0, 4, 2, 0, 7, 128,
- 7, 0, 170, 128, 3, 0, 228, 128, 2, 0, 228, 128, 88, 0, 0,
- 4, 1, 0, 11, 128, 7, 0, 85, 128, 2, 0, 164, 128, 1, 0,
- 228, 128, 8, 0, 0, 3, 0, 0, 8, 128, 1, 0, 244, 128, 3,
- 0, 228, 160, 2, 0, 0, 3, 0, 0, 8, 128, 0, 0, 255, 129,
- 1, 0, 170, 128, 2, 0, 0, 3, 1, 0, 7, 128, 0, 0, 255,
- 128, 1, 0, 244, 128, 2, 0, 0, 3, 0, 0, 8, 128, 1, 0,
- 85, 129, 1, 0, 0, 128, 88, 0, 0, 4, 2, 0, 3, 128, 0,
- 0, 255, 128, 1, 0, 225, 128, 1, 0, 228, 128, 10, 0, 0, 3,
- 0, 0, 8, 128, 1, 0, 170, 128, 2, 0, 0, 128, 11, 0, 0,
- 3, 5, 0, 8, 128, 2, 0, 85, 128, 1, 0, 170, 128, 8, 0,
- 0, 3, 1, 0, 8, 128, 1, 0, 228, 128, 3, 0, 228, 160, 2,
- 0, 0, 3, 2, 0, 7, 128, 1, 0, 255, 129, 1, 0, 228, 128,
- 5, 0, 0, 3, 2, 0, 7, 128, 1, 0, 255, 128, 2, 0, 228,
- 128, 2, 0, 0, 3, 2, 0, 8, 128, 0, 0, 255, 129, 1, 0,
- 255, 128, 6, 0, 0, 2, 2, 0, 8, 128, 2, 0, 255, 128, 4,
- 0, 0, 4, 2, 0, 7, 128, 2, 0, 228, 128, 2, 0, 255, 128,
- 1, 0, 255, 128, 88, 0, 0, 4, 1, 0, 7, 128, 0, 0, 255,
- 128, 1, 0, 228, 128, 2, 0, 228, 128, 2, 0, 0, 3, 2, 0,
- 7, 128, 1, 0, 255, 129, 1, 0, 228, 128, 2, 0, 0, 3, 0,
- 0, 8, 128, 1, 0, 255, 129, 2, 0, 0, 160, 5, 0, 0, 3,
- 2, 0, 7, 128, 0, 0, 255, 128, 2, 0, 228, 128, 2, 0, 0,
- 3, 0, 0, 8, 128, 1, 0, 255, 129, 5, 0, 255, 128, 2, 0,
- 0, 3, 2, 0, 8, 128, 5, 0, 255, 129, 2, 0, 0, 160, 6,
- 0, 0, 2, 0, 0, 8, 128, 0, 0, 255, 128, 4, 0, 0, 4,
- 2, 0, 7, 128, 2, 0, 228, 128, 0, 0, 255, 128, 1, 0, 255,
- 128, 88, 0, 0, 4, 1, 0, 7, 128, 2, 0, 255, 128, 1, 0,
- 228, 128, 2, 0, 228, 128, 88, 0, 0, 4, 0, 0, 7, 128, 8,
- 0, 85, 129, 1, 0, 228, 128, 0, 0, 228, 128, 18, 0, 0, 4,
- 1, 0, 7, 128, 3, 0, 255, 128, 0, 0, 228, 128, 5, 0, 228,
- 128, 5, 0, 0, 3, 1, 0, 8, 128, 3, 0, 255, 128, 3, 0,
- 255, 128, 88, 0, 0, 4, 1, 0, 8, 128, 1, 0, 255, 129, 2,
- 0, 0, 160, 2, 0, 85, 160, 5, 0, 0, 3, 0, 0, 7, 128,
- 4, 0, 255, 128, 1, 0, 228, 128, 5, 0, 0, 3, 0, 0, 8,
- 128, 4, 0, 255, 128, 4, 0, 255, 128, 88, 0, 0, 4, 0, 0,
- 8, 128, 0, 0, 255, 129, 2, 0, 0, 160, 2, 0, 85, 160, 2,
- 0, 0, 3, 0, 0, 8, 128, 1, 0, 255, 128, 0, 0, 255, 128,
- 88, 0, 0, 4, 4, 0, 7, 128, 0, 0, 255, 129, 0, 0, 228,
- 128, 4, 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128, 4, 0,
- 228, 128, 255, 255, 0, 0, 83, 72, 68, 82, 252, 21, 0, 0, 64,
- 0, 0, 0, 127, 5, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16,
- 0, 0, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 1, 0,
- 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0, 0, 85,
- 85, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0, 0, 0,
- 85, 85, 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0,
- 0, 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0, 0, 104, 0,
- 0, 2, 9, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 0,
- 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0,
- 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 69, 0, 0,
- 9, 242, 0, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 1, 0,
- 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0, 96, 16, 0, 1,
- 0, 0, 0, 24, 0, 0, 7, 18, 0, 16, 0, 2, 0, 0, 0,
- 58, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 0, 24, 0, 0, 7, 34, 0, 16, 0, 2, 0, 0, 0, 58, 0,
- 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 60,
- 0, 0, 7, 18, 0, 16, 0, 2, 0, 0, 0, 26, 0, 16, 0,
- 2, 0, 0, 0, 10, 0, 16, 0, 2, 0, 0, 0, 31, 0, 4,
- 3, 10, 0, 16, 0, 2, 0, 0, 0, 54, 0, 0, 5, 242, 32,
- 16, 0, 0, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 62,
- 0, 0, 1, 21, 0, 0, 1, 14, 0, 0, 7, 114, 0, 16, 0,
- 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 246, 15, 16,
- 0, 0, 0, 0, 0, 14, 0, 0, 7, 114, 0, 16, 0, 1, 0,
- 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 246, 15, 16, 0, 1,
- 0, 0, 0, 32, 0, 0, 8, 18, 0, 16, 0, 2, 0, 0, 0,
- 10, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0,
- 0, 12, 0, 0, 0, 31, 0, 4, 3, 10, 0, 16, 0, 2, 0,
- 0, 0, 52, 0, 0, 7, 18, 0, 16, 0, 2, 0, 0, 0, 42,
- 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0,
- 52, 0, 0, 7, 18, 0, 16, 0, 2, 0, 0, 0, 10, 0, 16,
- 0, 1, 0, 0, 0, 10, 0, 16, 0, 2, 0, 0, 0, 51, 0,
- 0, 7, 34, 0, 16, 0, 2, 0, 0, 0, 42, 0, 16, 0, 1,
- 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 51, 0, 0, 7,
- 34, 0, 16, 0, 2, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0,
- 0, 26, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 8, 130, 0,
- 16, 0, 2, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 2,
- 0, 0, 0, 10, 0, 16, 0, 2, 0, 0, 0, 29, 0, 0, 7,
- 18, 0, 16, 0, 3, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 31, 0, 4, 3, 10, 0,
- 16, 0, 3, 0, 0, 0, 0, 0, 0, 8, 242, 0, 16, 0, 3,
- 0, 0, 0, 6, 10, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 150, 4, 16, 0, 0, 0, 0, 0, 49, 0, 0, 10, 114, 0, 16,
- 0, 4, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 7, 16, 0, 3,
- 0, 0, 0, 14, 0, 0, 7, 114, 0, 16, 0, 5, 0, 0, 0,
- 246, 15, 16, 0, 2, 0, 0, 0, 22, 7, 16, 0, 3, 0, 0,
- 0, 56, 0, 0, 7, 114, 0, 16, 0, 2, 0, 0, 0, 70, 2,
- 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0, 55,
- 0, 0, 9, 98, 0, 16, 0, 5, 0, 0, 0, 6, 0, 16, 0,
- 4, 0, 0, 0, 6, 3, 16, 0, 2, 0, 0, 0, 6, 1, 16,
- 0, 3, 0, 0, 0, 29, 0, 0, 7, 146, 0, 16, 0, 4, 0,
- 0, 0, 166, 10, 16, 0, 0, 0, 0, 0, 86, 1, 16, 0, 0,
- 0, 0, 0, 55, 0, 0, 9, 98, 0, 16, 0, 6, 0, 0, 0,
- 86, 5, 16, 0, 4, 0, 0, 0, 246, 13, 16, 0, 2, 0, 0,
- 0, 6, 1, 16, 0, 3, 0, 0, 0, 55, 0, 0, 9, 50, 0,
- 16, 0, 3, 0, 0, 0, 166, 10, 16, 0, 4, 0, 0, 0, 230,
- 10, 16, 0, 2, 0, 0, 0, 230, 10, 16, 0, 3, 0, 0, 0,
- 54, 0, 0, 5, 18, 0, 16, 0, 6, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 0, 0, 54, 0, 0, 5, 66, 0, 16, 0, 3, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 55, 0, 0, 9, 114,
- 0, 16, 0, 3, 0, 0, 0, 246, 15, 16, 0, 4, 0, 0, 0,
- 70, 2, 16, 0, 6, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0,
- 0, 54, 0, 0, 5, 18, 0, 16, 0, 5, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 0, 0, 55, 0, 0, 9, 114, 0, 16, 0, 3,
- 0, 0, 0, 6, 0, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0,
- 5, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0, 18, 0, 0,
- 1, 0, 0, 0, 8, 242, 0, 16, 0, 4, 0, 0, 0, 86, 10,
- 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 134, 1, 16, 0, 0,
- 0, 0, 0, 49, 0, 0, 10, 114, 0, 16, 0, 5, 0, 0, 0,
- 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 22, 7, 16, 0, 4, 0, 0, 0, 14, 0,
- 0, 7, 114, 0, 16, 0, 6, 0, 0, 0, 246, 15, 16, 0, 2,
- 0, 0, 0, 22, 7, 16, 0, 4, 0, 0, 0, 56, 0, 0, 7,
- 114, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0,
- 0, 70, 2, 16, 0, 6, 0, 0, 0, 55, 0, 0, 9, 82, 0,
- 16, 0, 6, 0, 0, 0, 6, 0, 16, 0, 5, 0, 0, 0, 6,
- 3, 16, 0, 2, 0, 0, 0, 6, 1, 16, 0, 4, 0, 0, 0,
- 29, 0, 0, 7, 146, 0, 16, 0, 5, 0, 0, 0, 166, 10, 16,
- 0, 0, 0, 0, 0, 6, 4, 16, 0, 0, 0, 0, 0, 55, 0,
- 0, 9, 82, 0, 16, 0, 7, 0, 0, 0, 86, 5, 16, 0, 5,
- 0, 0, 0, 246, 13, 16, 0, 2, 0, 0, 0, 6, 1, 16, 0,
- 4, 0, 0, 0, 55, 0, 0, 9, 50, 0, 16, 0, 2, 0, 0,
- 0, 166, 10, 16, 0, 5, 0, 0, 0, 182, 15, 16, 0, 2, 0,
- 0, 0, 182, 15, 16, 0, 4, 0, 0, 0, 54, 0, 0, 5, 34,
- 0, 16, 0, 7, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0,
- 54, 0, 0, 5, 66, 0, 16, 0, 2, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 0, 0, 55, 0, 0, 9, 114, 0, 16, 0, 2, 0,
- 0, 0, 246, 15, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 7,
- 0, 0, 0, 70, 2, 16, 0, 2, 0, 0, 0, 54, 0, 0, 5,
- 34, 0, 16, 0, 6, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 0, 55, 0, 0, 9, 114, 0, 16, 0, 3, 0, 0, 0, 6, 0,
- 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 6, 0, 0, 0, 70,
- 2, 16, 0, 2, 0, 0, 0, 21, 0, 0, 1, 16, 0, 0, 10,
- 18, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0,
- 0, 2, 64, 0, 0, 154, 153, 153, 62, 61, 10, 23, 63, 174, 71,
- 225, 61, 0, 0, 0, 0, 16, 0, 0, 10, 34, 0, 16, 0, 2,
- 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0, 2, 64, 0, 0,
- 154, 153, 153, 62, 61, 10, 23, 63, 174, 71, 225, 61, 0, 0, 0,
- 0, 0, 0, 0, 8, 18, 0, 16, 0, 2, 0, 0, 0, 26, 0,
- 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 10, 0, 16, 0, 2,
- 0, 0, 0, 0, 0, 0, 7, 114, 0, 16, 0, 2, 0, 0, 0,
- 6, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0,
- 0, 16, 0, 0, 10, 130, 0, 16, 0, 2, 0, 0, 0, 70, 2,
- 16, 0, 2, 0, 0, 0, 2, 64, 0, 0, 154, 153, 153, 62, 61,
- 10, 23, 63, 174, 71, 225, 61, 0, 0, 0, 0, 51, 0, 0, 7,
- 18, 0, 16, 0, 3, 0, 0, 0, 26, 0, 16, 0, 2, 0, 0,
- 0, 10, 0, 16, 0, 2, 0, 0, 0, 51, 0, 0, 7, 18, 0,
- 16, 0, 3, 0, 0, 0, 42, 0, 16, 0, 2, 0, 0, 0, 10,
- 0, 16, 0, 3, 0, 0, 0, 52, 0, 0, 7, 34, 0, 16, 0,
- 3, 0, 0, 0, 26, 0, 16, 0, 2, 0, 0, 0, 10, 0, 16,
- 0, 2, 0, 0, 0, 52, 0, 0, 7, 34, 0, 16, 0, 3, 0,
- 0, 0, 42, 0, 16, 0, 2, 0, 0, 0, 26, 0, 16, 0, 3,
- 0, 0, 0, 49, 0, 0, 7, 66, 0, 16, 0, 3, 0, 0, 0,
- 10, 0, 16, 0, 3, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 114, 0, 16, 0, 4, 0, 0, 0, 246, 15,
- 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 70, 2, 16, 0, 2,
- 0, 0, 0, 56, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0,
- 246, 15, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0,
- 0, 0, 0, 0, 8, 18, 0, 16, 0, 3, 0, 0, 0, 58, 0,
- 16, 0, 2, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 3,
- 0, 0, 0, 14, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0,
- 70, 2, 16, 0, 4, 0, 0, 0, 6, 0, 16, 0, 3, 0, 0,
- 0, 0, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 246, 15,
- 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 55,
- 0, 0, 9, 114, 0, 16, 0, 2, 0, 0, 0, 166, 10, 16, 0,
- 3, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16,
- 0, 2, 0, 0, 0, 49, 0, 0, 7, 18, 0, 16, 0, 3, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 26, 0, 16, 0, 3,
- 0, 0, 0, 0, 0, 0, 8, 114, 0, 16, 0, 4, 0, 0, 0,
- 246, 15, 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 70, 2, 16,
- 0, 2, 0, 0, 0, 0, 0, 0, 8, 66, 0, 16, 0, 3, 0,
- 0, 0, 58, 0, 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 1,
- 64, 0, 0, 0, 0, 128, 63, 56, 0, 0, 7, 114, 0, 16, 0,
- 4, 0, 0, 0, 166, 10, 16, 0, 3, 0, 0, 0, 70, 2, 16,
- 0, 4, 0, 0, 0, 0, 0, 0, 8, 34, 0, 16, 0, 3, 0,
- 0, 0, 58, 0, 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 26,
- 0, 16, 0, 3, 0, 0, 0, 14, 0, 0, 7, 226, 0, 16, 0,
- 3, 0, 0, 0, 6, 9, 16, 0, 4, 0, 0, 0, 86, 5, 16,
- 0, 3, 0, 0, 0, 0, 0, 0, 7, 226, 0, 16, 0, 3, 0,
- 0, 0, 246, 15, 16, 0, 2, 0, 0, 0, 86, 14, 16, 0, 3,
- 0, 0, 0, 55, 0, 0, 9, 114, 0, 16, 0, 2, 0, 0, 0,
- 6, 0, 16, 0, 3, 0, 0, 0, 150, 7, 16, 0, 3, 0, 0,
- 0, 70, 2, 16, 0, 2, 0, 0, 0, 18, 0, 0, 1, 32, 0,
- 0, 8, 130, 0, 16, 0, 2, 0, 0, 0, 10, 128, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 13, 0, 0, 0,
- 31, 0, 4, 3, 58, 0, 16, 0, 2, 0, 0, 0, 52, 0, 0,
- 7, 130, 0, 16, 0, 2, 0, 0, 0, 42, 0, 16, 0, 0, 0,
- 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 52, 0, 0, 7, 130,
- 0, 16, 0, 2, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0,
- 58, 0, 16, 0, 2, 0, 0, 0, 51, 0, 0, 7, 18, 0, 16,
- 0, 3, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 26, 0,
- 16, 0, 0, 0, 0, 0, 51, 0, 0, 7, 18, 0, 16, 0, 3,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0,
- 3, 0, 0, 0, 0, 0, 0, 8, 130, 0, 16, 0, 3, 0, 0,
- 0, 58, 0, 16, 0, 2, 0, 0, 0, 10, 0, 16, 128, 65, 0,
- 0, 0, 3, 0, 0, 0, 29, 0, 0, 7, 130, 0, 16, 0, 2,
- 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0,
- 1, 0, 0, 0, 31, 0, 4, 3, 58, 0, 16, 0, 2, 0, 0,
- 0, 0, 0, 0, 8, 242, 0, 16, 0, 4, 0, 0, 0, 6, 10,
- 16, 128, 65, 0, 0, 0, 1, 0, 0, 0, 150, 4, 16, 0, 1,
- 0, 0, 0, 49, 0, 0, 10, 114, 0, 16, 0, 5, 0, 0, 0,
- 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 22, 7, 16, 0, 4, 0, 0, 0, 14, 0,
- 0, 7, 114, 0, 16, 0, 6, 0, 0, 0, 246, 15, 16, 0, 3,
- 0, 0, 0, 22, 7, 16, 0, 4, 0, 0, 0, 56, 0, 0, 7,
- 114, 0, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0,
- 0, 70, 2, 16, 0, 6, 0, 0, 0, 55, 0, 0, 9, 98, 0,
- 16, 0, 6, 0, 0, 0, 6, 0, 16, 0, 5, 0, 0, 0, 6,
- 3, 16, 0, 3, 0, 0, 0, 6, 1, 16, 0, 4, 0, 0, 0,
- 29, 0, 0, 7, 146, 0, 16, 0, 5, 0, 0, 0, 166, 10, 16,
- 0, 1, 0, 0, 0, 86, 1, 16, 0, 1, 0, 0, 0, 55, 0,
- 0, 9, 98, 0, 16, 0, 7, 0, 0, 0, 86, 5, 16, 0, 5,
- 0, 0, 0, 246, 13, 16, 0, 3, 0, 0, 0, 6, 1, 16, 0,
- 4, 0, 0, 0, 55, 0, 0, 9, 50, 0, 16, 0, 4, 0, 0,
- 0, 166, 10, 16, 0, 5, 0, 0, 0, 230, 10, 16, 0, 3, 0,
- 0, 0, 230, 10, 16, 0, 4, 0, 0, 0, 54, 0, 0, 5, 18,
- 0, 16, 0, 7, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0,
- 54, 0, 0, 5, 66, 0, 16, 0, 4, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 0, 0, 55, 0, 0, 9, 114, 0, 16, 0, 4, 0,
- 0, 0, 246, 15, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 7,
- 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 54, 0, 0, 5,
- 18, 0, 16, 0, 6, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 0, 55, 0, 0, 9, 114, 0, 16, 0, 4, 0, 0, 0, 6, 0,
- 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 6, 0, 0, 0, 70,
- 2, 16, 0, 4, 0, 0, 0, 18, 0, 0, 1, 0, 0, 0, 8,
- 242, 0, 16, 0, 5, 0, 0, 0, 86, 10, 16, 128, 65, 0, 0,
- 0, 1, 0, 0, 0, 134, 1, 16, 0, 1, 0, 0, 0, 49, 0,
- 0, 10, 114, 0, 16, 0, 6, 0, 0, 0, 2, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 22, 7, 16, 0, 5, 0, 0, 0, 14, 0, 0, 7, 114, 0, 16,
- 0, 7, 0, 0, 0, 246, 15, 16, 0, 3, 0, 0, 0, 22, 7,
- 16, 0, 5, 0, 0, 0, 56, 0, 0, 7, 114, 0, 16, 0, 3,
- 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0,
- 7, 0, 0, 0, 55, 0, 0, 9, 82, 0, 16, 0, 7, 0, 0,
- 0, 6, 0, 16, 0, 6, 0, 0, 0, 6, 3, 16, 0, 3, 0,
- 0, 0, 6, 1, 16, 0, 5, 0, 0, 0, 29, 0, 0, 7, 146,
- 0, 16, 0, 6, 0, 0, 0, 166, 10, 16, 0, 1, 0, 0, 0,
- 6, 4, 16, 0, 1, 0, 0, 0, 55, 0, 0, 9, 82, 0, 16,
- 0, 8, 0, 0, 0, 86, 5, 16, 0, 6, 0, 0, 0, 246, 13,
- 16, 0, 3, 0, 0, 0, 6, 1, 16, 0, 5, 0, 0, 0, 55,
- 0, 0, 9, 50, 0, 16, 0, 3, 0, 0, 0, 166, 10, 16, 0,
- 6, 0, 0, 0, 182, 15, 16, 0, 3, 0, 0, 0, 182, 15, 16,
- 0, 5, 0, 0, 0, 54, 0, 0, 5, 34, 0, 16, 0, 8, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 66,
- 0, 16, 0, 3, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0,
- 55, 0, 0, 9, 114, 0, 16, 0, 3, 0, 0, 0, 246, 15, 16,
- 0, 6, 0, 0, 0, 70, 2, 16, 0, 8, 0, 0, 0, 70, 2,
- 16, 0, 3, 0, 0, 0, 54, 0, 0, 5, 34, 0, 16, 0, 7,
- 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 55, 0, 0, 9,
- 114, 0, 16, 0, 4, 0, 0, 0, 6, 0, 16, 0, 6, 0, 0,
- 0, 70, 2, 16, 0, 7, 0, 0, 0, 70, 2, 16, 0, 3, 0,
- 0, 0, 21, 0, 0, 1, 16, 0, 0, 10, 130, 0, 16, 0, 2,
- 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 2, 64, 0, 0,
- 154, 153, 153, 62, 61, 10, 23, 63, 174, 71, 225, 61, 0, 0, 0,
- 0, 16, 0, 0, 10, 18, 0, 16, 0, 3, 0, 0, 0, 70, 2,
- 16, 0, 4, 0, 0, 0, 2, 64, 0, 0, 154, 153, 153, 62, 61,
- 10, 23, 63, 174, 71, 225, 61, 0, 0, 0, 0, 0, 0, 0, 8,
- 130, 0, 16, 0, 2, 0, 0, 0, 58, 0, 16, 0, 2, 0, 0,
- 0, 10, 0, 16, 128, 65, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 7, 114, 0, 16, 0, 3, 0, 0, 0, 246, 15, 16, 0, 2,
- 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 16, 0, 0, 10,
- 130, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0,
- 0, 2, 64, 0, 0, 154, 153, 153, 62, 61, 10, 23, 63, 174, 71,
- 225, 61, 0, 0, 0, 0, 51, 0, 0, 7, 130, 0, 16, 0, 3,
- 0, 0, 0, 26, 0, 16, 0, 3, 0, 0, 0, 10, 0, 16, 0,
- 3, 0, 0, 0, 51, 0, 0, 7, 130, 0, 16, 0, 3, 0, 0,
- 0, 42, 0, 16, 0, 3, 0, 0, 0, 58, 0, 16, 0, 3, 0,
- 0, 0, 52, 0, 0, 7, 18, 0, 16, 0, 4, 0, 0, 0, 26,
- 0, 16, 0, 3, 0, 0, 0, 10, 0, 16, 0, 3, 0, 0, 0,
- 52, 0, 0, 7, 18, 0, 16, 0, 4, 0, 0, 0, 42, 0, 16,
- 0, 3, 0, 0, 0, 10, 0, 16, 0, 4, 0, 0, 0, 49, 0,
- 0, 7, 34, 0, 16, 0, 4, 0, 0, 0, 58, 0, 16, 0, 3,
- 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
- 114, 0, 16, 0, 5, 0, 0, 0, 246, 15, 16, 128, 65, 0, 0,
- 0, 2, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0, 56, 0,
- 0, 7, 114, 0, 16, 0, 5, 0, 0, 0, 246, 15, 16, 0, 2,
- 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0, 0, 0, 0, 8,
- 130, 0, 16, 0, 3, 0, 0, 0, 58, 0, 16, 0, 2, 0, 0,
- 0, 58, 0, 16, 128, 65, 0, 0, 0, 3, 0, 0, 0, 14, 0,
- 0, 7, 114, 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 5,
- 0, 0, 0, 246, 15, 16, 0, 3, 0, 0, 0, 0, 0, 0, 7,
- 114, 0, 16, 0, 5, 0, 0, 0, 246, 15, 16, 0, 2, 0, 0,
- 0, 70, 2, 16, 0, 5, 0, 0, 0, 55, 0, 0, 9, 114, 0,
- 16, 0, 3, 0, 0, 0, 86, 5, 16, 0, 4, 0, 0, 0, 70,
- 2, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0,
- 49, 0, 0, 7, 130, 0, 16, 0, 3, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 128, 63, 10, 0, 16, 0, 4, 0, 0, 0, 0, 0,
- 0, 8, 226, 0, 16, 0, 4, 0, 0, 0, 246, 15, 16, 128, 65,
- 0, 0, 0, 2, 0, 0, 0, 6, 9, 16, 0, 3, 0, 0, 0,
- 0, 0, 0, 8, 18, 0, 16, 0, 5, 0, 0, 0, 58, 0, 16,
- 128, 65, 0, 0, 0, 2, 0, 0, 0, 1, 64, 0, 0, 0, 0,
- 128, 63, 56, 0, 0, 7, 226, 0, 16, 0, 4, 0, 0, 0, 86,
- 14, 16, 0, 4, 0, 0, 0, 6, 0, 16, 0, 5, 0, 0, 0,
- 0, 0, 0, 8, 18, 0, 16, 0, 4, 0, 0, 0, 58, 0, 16,
- 128, 65, 0, 0, 0, 2, 0, 0, 0, 10, 0, 16, 0, 4, 0,
- 0, 0, 14, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 150,
- 7, 16, 0, 4, 0, 0, 0, 6, 0, 16, 0, 4, 0, 0, 0,
- 0, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 246, 15, 16,
- 0, 2, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 55, 0,
- 0, 9, 114, 0, 16, 0, 2, 0, 0, 0, 246, 15, 16, 0, 3,
- 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0,
- 3, 0, 0, 0, 18, 0, 0, 1, 32, 0, 0, 8, 130, 0, 16,
- 0, 2, 0, 0, 0, 10, 128, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 14, 0, 0, 0, 31, 0, 4, 3, 58,
- 0, 16, 0, 2, 0, 0, 0, 16, 0, 0, 10, 130, 0, 16, 0,
- 2, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 2, 64, 0,
- 0, 154, 153, 153, 62, 61, 10, 23, 63, 174, 71, 225, 61, 0, 0,
- 0, 0, 16, 0, 0, 10, 18, 0, 16, 0, 3, 0, 0, 0, 70,
- 2, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 154, 153, 153, 62,
- 61, 10, 23, 63, 174, 71, 225, 61, 0, 0, 0, 0, 0, 0, 0,
- 8, 130, 0, 16, 0, 2, 0, 0, 0, 58, 0, 16, 0, 2, 0,
- 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 7, 114, 0, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0,
- 0, 0, 0, 0, 246, 15, 16, 0, 2, 0, 0, 0, 16, 0, 0,
- 10, 130, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 3, 0,
- 0, 0, 2, 64, 0, 0, 154, 153, 153, 62, 61, 10, 23, 63, 174,
- 71, 225, 61, 0, 0, 0, 0, 51, 0, 0, 7, 130, 0, 16, 0,
- 3, 0, 0, 0, 26, 0, 16, 0, 3, 0, 0, 0, 10, 0, 16,
- 0, 3, 0, 0, 0, 51, 0, 0, 7, 130, 0, 16, 0, 3, 0,
- 0, 0, 42, 0, 16, 0, 3, 0, 0, 0, 58, 0, 16, 0, 3,
- 0, 0, 0, 52, 0, 0, 7, 18, 0, 16, 0, 4, 0, 0, 0,
- 26, 0, 16, 0, 3, 0, 0, 0, 10, 0, 16, 0, 3, 0, 0,
- 0, 52, 0, 0, 7, 18, 0, 16, 0, 4, 0, 0, 0, 42, 0,
- 16, 0, 3, 0, 0, 0, 10, 0, 16, 0, 4, 0, 0, 0, 49,
- 0, 0, 7, 34, 0, 16, 0, 4, 0, 0, 0, 58, 0, 16, 0,
- 3, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 114, 0, 16, 0, 5, 0, 0, 0, 246, 15, 16, 128, 65, 0,
- 0, 0, 2, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0, 0, 56,
- 0, 0, 7, 114, 0, 16, 0, 5, 0, 0, 0, 246, 15, 16, 0,
- 2, 0, 0, 0, 70, 2, 16, 0, 5, 0, 0, 0, 0, 0, 0,
- 8, 130, 0, 16, 0, 3, 0, 0, 0, 58, 0, 16, 0, 2, 0,
- 0, 0, 58, 0, 16, 128, 65, 0, 0, 0, 3, 0, 0, 0, 14,
- 0, 0, 7, 114, 0, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0,
- 5, 0, 0, 0, 246, 15, 16, 0, 3, 0, 0, 0, 0, 0, 0,
- 7, 114, 0, 16, 0, 5, 0, 0, 0, 246, 15, 16, 0, 2, 0,
- 0, 0, 70, 2, 16, 0, 5, 0, 0, 0, 55, 0, 0, 9, 114,
- 0, 16, 0, 3, 0, 0, 0, 86, 5, 16, 0, 4, 0, 0, 0,
- 70, 2, 16, 0, 5, 0, 0, 0, 70, 2, 16, 0, 3, 0, 0,
- 0, 49, 0, 0, 7, 130, 0, 16, 0, 3, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 128, 63, 10, 0, 16, 0, 4, 0, 0, 0, 0,
- 0, 0, 8, 226, 0, 16, 0, 4, 0, 0, 0, 246, 15, 16, 128,
- 65, 0, 0, 0, 2, 0, 0, 0, 6, 9, 16, 0, 3, 0, 0,
- 0, 0, 0, 0, 8, 18, 0, 16, 0, 5, 0, 0, 0, 58, 0,
- 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 1, 64, 0, 0, 0,
- 0, 128, 63, 56, 0, 0, 7, 226, 0, 16, 0, 4, 0, 0, 0,
- 86, 14, 16, 0, 4, 0, 0, 0, 6, 0, 16, 0, 5, 0, 0,
- 0, 0, 0, 0, 8, 18, 0, 16, 0, 4, 0, 0, 0, 58, 0,
- 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 10, 0, 16, 0, 4,
- 0, 0, 0, 14, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0,
- 150, 7, 16, 0, 4, 0, 0, 0, 6, 0, 16, 0, 4, 0, 0,
- 0, 0, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 246, 15,
- 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 55,
- 0, 0, 9, 114, 0, 16, 0, 2, 0, 0, 0, 246, 15, 16, 0,
- 3, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16,
- 0, 3, 0, 0, 0, 18, 0, 0, 1, 16, 0, 0, 10, 130, 0,
- 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 2,
- 64, 0, 0, 154, 153, 153, 62, 61, 10, 23, 63, 174, 71, 225, 61,
- 0, 0, 0, 0, 16, 0, 0, 10, 18, 0, 16, 0, 3, 0, 0,
- 0, 70, 2, 16, 0, 1, 0, 0, 0, 2, 64, 0, 0, 154, 153,
- 153, 62, 61, 10, 23, 63, 174, 71, 225, 61, 0, 0, 0, 0, 0,
- 0, 0, 8, 130, 0, 16, 0, 2, 0, 0, 0, 58, 0, 16, 0,
- 2, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 7, 114, 0, 16, 0, 1, 0, 0, 0, 70, 2,
- 16, 0, 1, 0, 0, 0, 246, 15, 16, 0, 2, 0, 0, 0, 16,
- 0, 0, 10, 130, 0, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0,
- 1, 0, 0, 0, 2, 64, 0, 0, 154, 153, 153, 62, 61, 10, 23,
- 63, 174, 71, 225, 61, 0, 0, 0, 0, 51, 0, 0, 7, 18, 0,
- 16, 0, 3, 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 10,
- 0, 16, 0, 1, 0, 0, 0, 51, 0, 0, 7, 18, 0, 16, 0,
- 3, 0, 0, 0, 42, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16,
- 0, 3, 0, 0, 0, 52, 0, 0, 7, 34, 0, 16, 0, 3, 0,
- 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 1,
- 0, 0, 0, 52, 0, 0, 7, 34, 0, 16, 0, 3, 0, 0, 0,
- 42, 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 0, 3, 0, 0,
- 0, 49, 0, 0, 7, 66, 0, 16, 0, 3, 0, 0, 0, 10, 0,
- 16, 0, 3, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 114, 0, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0,
- 1, 0, 0, 0, 246, 15, 16, 128, 65, 0, 0, 0, 2, 0, 0,
- 0, 56, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 246, 15,
- 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 0,
- 0, 0, 8, 18, 0, 16, 0, 3, 0, 0, 0, 58, 0, 16, 0,
- 2, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 3, 0, 0,
- 0, 14, 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 70, 2,
- 16, 0, 4, 0, 0, 0, 6, 0, 16, 0, 3, 0, 0, 0, 0,
- 0, 0, 7, 114, 0, 16, 0, 4, 0, 0, 0, 246, 15, 16, 0,
- 2, 0, 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 55, 0, 0,
- 9, 114, 0, 16, 0, 1, 0, 0, 0, 166, 10, 16, 0, 3, 0,
- 0, 0, 70, 2, 16, 0, 4, 0, 0, 0, 70, 2, 16, 0, 1,
- 0, 0, 0, 49, 0, 0, 7, 18, 0, 16, 0, 3, 0, 0, 0,
- 1, 64, 0, 0, 0, 0, 128, 63, 26, 0, 16, 0, 3, 0, 0,
- 0, 0, 0, 0, 8, 114, 0, 16, 0, 4, 0, 0, 0, 246, 15,
- 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 70, 2, 16, 0, 1,
- 0, 0, 0, 0, 0, 0, 8, 66, 0, 16, 0, 3, 0, 0, 0,
- 58, 0, 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 128, 63, 56, 0, 0, 7, 114, 0, 16, 0, 4, 0,
- 0, 0, 166, 10, 16, 0, 3, 0, 0, 0, 70, 2, 16, 0, 4,
- 0, 0, 0, 0, 0, 0, 8, 34, 0, 16, 0, 3, 0, 0, 0,
- 58, 0, 16, 128, 65, 0, 0, 0, 2, 0, 0, 0, 26, 0, 16,
- 0, 3, 0, 0, 0, 14, 0, 0, 7, 226, 0, 16, 0, 3, 0,
- 0, 0, 6, 9, 16, 0, 4, 0, 0, 0, 86, 5, 16, 0, 3,
- 0, 0, 0, 0, 0, 0, 7, 226, 0, 16, 0, 3, 0, 0, 0,
- 246, 15, 16, 0, 2, 0, 0, 0, 86, 14, 16, 0, 3, 0, 0,
- 0, 55, 0, 0, 9, 114, 0, 16, 0, 2, 0, 0, 0, 6, 0,
- 16, 0, 3, 0, 0, 0, 150, 7, 16, 0, 3, 0, 0, 0, 70,
- 2, 16, 0, 1, 0, 0, 0, 21, 0, 0, 1, 21, 0, 0, 1,
- 21, 0, 0, 1, 0, 0, 0, 8, 18, 0, 16, 0, 1, 0, 0,
- 0, 58, 0, 16, 128, 65, 0, 0, 0, 1, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 128, 63, 56, 0, 0, 7, 226, 0, 16, 0, 1,
- 0, 0, 0, 246, 15, 16, 0, 1, 0, 0, 0, 6, 9, 16, 0,
- 2, 0, 0, 0, 50, 0, 0, 9, 114, 0, 16, 0, 0, 0, 0,
- 0, 6, 0, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 0, 0,
- 0, 0, 150, 7, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 114,
- 32, 16, 0, 0, 0, 0, 0, 246, 15, 16, 0, 0, 0, 0, 0,
- 70, 2, 16, 0, 0, 0, 0, 0, 54, 0, 0, 5, 130, 32, 16,
- 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 62, 0,
- 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 195, 0, 0, 0, 9,
- 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 128, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0,
- 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 100, 1, 0, 0, 1,
- 0, 0, 0, 232, 0, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0,
- 0, 4, 255, 255, 0, 1, 0, 0, 48, 1, 0, 0, 188, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 197,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 209, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0,
- 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 12,
- 0, 0, 0, 213, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0,
- 4, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 1, 0, 0,
- 0, 12, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 115, 83, 97, 109, 112, 108, 101, 114,
- 0, 115, 66, 99, 107, 83, 97, 109, 112, 108, 101, 114, 0, 116, 101,
- 120, 0, 98, 99, 107, 116, 101, 120, 0, 36, 71, 108, 111, 98, 97,
- 108, 115, 0, 171, 171, 171, 220, 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 24, 1, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0,
- 0, 32, 1, 0, 0, 0, 0, 0, 0, 98, 108, 101, 110, 100, 111,
- 112, 0, 0, 0, 19, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82,
- 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67,
- 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48,
- 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 104,
- 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 12, 0, 0, 0, 83, 86, 95, 80, 111, 115, 105,
- 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171,
- 171, 171, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8,
- 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95,
- 84, 97, 114, 103, 101, 116, 0, 171, 171, 176, 56, 0, 0, 0, 0,
- 0, 0, 83, 97, 109, 112, 108, 101, 82, 97, 100, 105, 97, 108, 71,
- 114, 97, 100, 105, 101, 110, 116, 0, 65, 80, 111, 115, 0, 44, 7,
- 0, 0, 68, 88, 66, 67, 172, 27, 205, 113, 176, 254, 27, 44, 22,
- 107, 179, 112, 127, 38, 148, 161, 1, 0, 0, 0, 44, 7, 0, 0,
- 6, 0, 0, 0, 56, 0, 0, 0, 148, 1, 0, 0, 104, 3, 0,
- 0, 228, 3, 0, 0, 136, 6, 0, 0, 188, 6, 0, 0, 65, 111,
- 110, 57, 84, 1, 0, 0, 84, 1, 0, 0, 0, 2, 254, 255, 252,
- 0, 0, 0, 88, 0, 0, 0, 4, 0, 36, 0, 0, 0, 84, 0,
- 0, 0, 84, 0, 0, 0, 36, 0, 1, 0, 84, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 0, 0,
- 0, 0, 0, 1, 0, 3, 0, 1, 0, 5, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0, 5, 6, 0, 15,
- 160, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
- 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4,
- 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160,
- 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 3, 128, 0, 0, 228,
- 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0, 0, 3, 0, 0,
- 4, 128, 0, 0, 0, 128, 6, 0, 0, 160, 5, 0, 0, 3, 0,
- 0, 4, 128, 0, 0, 170, 128, 5, 0, 0, 160, 5, 0, 0, 3,
- 1, 0, 1, 128, 0, 0, 170, 128, 6, 0, 85, 160, 2, 0, 0,
- 3, 0, 0, 4, 128, 0, 0, 85, 129, 6, 0, 0, 160, 2, 0,
- 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160, 5,
- 0, 0, 3, 0, 0, 1, 128, 0, 0, 170, 128, 5, 0, 85, 160,
- 5, 0, 0, 3, 1, 0, 2, 128, 0, 0, 0, 128, 6, 0, 85,
- 160, 1, 0, 0, 2, 1, 0, 4, 128, 6, 0, 0, 160, 8, 0,
- 0, 3, 0, 0, 8, 224, 1, 0, 228, 128, 3, 0, 228, 160, 8,
- 0, 0, 3, 0, 0, 4, 224, 1, 0, 228, 128, 4, 0, 228, 160,
- 1, 0, 0, 2, 0, 0, 12, 192, 6, 0, 36, 160, 255, 255, 0,
- 0, 83, 72, 68, 82, 204, 1, 0, 0, 64, 0, 1, 0, 115, 0,
- 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 1, 0, 0, 0,
- 4, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0,
- 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101,
- 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0, 104, 0, 0, 2,
- 2, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0, 0, 0, 0,
- 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50, 0, 16, 0, 0,
- 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 54, 0, 0, 5, 50, 32, 16, 0, 0, 0,
- 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0,
- 1, 64, 0, 0, 0, 0, 128, 63, 0, 0, 0, 8, 34, 0, 16,
- 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 56, 0, 0, 8, 50,
- 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0,
- 70, 128, 32, 0, 1, 0, 0, 0, 3, 0, 0, 0, 56, 0, 0,
- 10, 50, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 66, 0, 16, 0,
- 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 16, 0, 0,
- 8, 66, 32, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0,
- 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16,
- 0, 0, 8, 130, 32, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0,
- 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 50, 0, 0, 11, 50, 32, 16, 0, 1, 0, 0, 0, 70, 16,
- 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 12, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 156, 2, 0,
- 0, 2, 0, 0, 0, 100, 0, 0, 0, 2, 0, 0, 0, 28, 0,
- 0, 0, 0, 4, 254, 255, 0, 1, 0, 0, 103, 2, 0, 0, 92,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 99, 98, 48, 0, 99, 98, 50, 0, 92, 0, 0, 0,
- 4, 0, 0, 0, 148, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 96, 0, 0, 0, 7, 0, 0, 0, 52, 1,
- 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 16, 1, 0, 0, 16, 0, 0,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 26, 1, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 2,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0,
- 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101, 115, 99, 0, 171,
- 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 77, 97,
- 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 84, 101, 120,
- 116, 67, 111, 108, 111, 114, 0, 171, 171, 220, 1, 0, 0, 0, 0,
- 0, 0, 44, 0, 0, 0, 2, 0, 0, 0, 244, 1, 0, 0, 0,
- 0, 0, 0, 4, 2, 0, 0, 48, 0, 0, 0, 8, 0, 0, 0,
- 2, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 32, 2, 0,
- 0, 64, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 40, 2,
- 0, 0, 0, 0, 0, 0, 56, 2, 0, 0, 80, 0, 0, 0, 8,
- 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0,
- 64, 2, 0, 0, 88, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
- 0, 68, 2, 0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 92, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0,
- 0, 0, 0, 92, 2, 0, 0, 96, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 68, 101, 118,
- 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85, 115, 101, 114, 83,
- 112, 97, 99, 101, 0, 171, 3, 0, 3, 0, 3, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 100, 105, 109, 101, 110, 115, 105, 111,
- 110, 115, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 100, 105, 102, 102, 0, 171, 171, 171, 1, 0,
- 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,
- 101, 110, 116, 101, 114, 49, 0, 65, 0, 171, 171, 0, 0, 3, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 97, 100,
- 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100, 105, 117, 115, 49,
- 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32,
- 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109,
- 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46,
- 49, 54, 51, 56, 52, 0, 171, 171, 171, 73, 83, 71, 78, 44, 0,
- 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 7, 3, 0, 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171,
- 171, 79, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0,
- 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
- 0, 3, 12, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83,
- 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67,
- 79, 79, 82, 68, 0, 171, 171, 171, 174, 94, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 224, 9,
- 0, 0, 68, 88, 66, 67, 76, 106, 34, 250, 169, 50, 124, 43, 130,
- 255, 198, 178, 126, 127, 40, 188, 1, 0, 0, 0, 224, 9, 0, 0,
- 6, 0, 0, 0, 56, 0, 0, 0, 128, 2, 0, 0, 88, 6, 0,
- 0, 212, 6, 0, 0, 60, 9, 0, 0, 172, 9, 0, 0, 65, 111,
- 110, 57, 64, 2, 0, 0, 64, 2, 0, 0, 0, 2, 255, 255, 8,
- 2, 0, 0, 56, 0, 0, 0, 1, 0, 44, 0, 0, 0, 56, 0,
- 0, 0, 56, 0, 2, 0, 36, 0, 0, 0, 56, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 4, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 1, 2, 255, 255, 81, 0, 0, 5, 3, 0, 15, 160, 0,
- 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 81, 0, 0, 5, 4, 0, 15, 160, 0, 0, 128, 63, 0, 0, 128,
- 191, 0, 0, 0, 0, 0, 0, 0, 128, 31, 0, 0, 2, 0, 0,
- 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0, 144, 0,
- 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1, 8, 15, 160,
- 2, 0, 0, 3, 0, 0, 3, 128, 0, 0, 235, 176, 1, 0, 228,
- 161, 90, 0, 0, 4, 0, 0, 8, 128, 0, 0, 228, 128, 0, 0,
- 228, 128, 2, 0, 0, 161, 5, 0, 0, 3, 0, 0, 8, 128, 0,
- 0, 255, 128, 1, 0, 170, 160, 1, 0, 0, 2, 0, 0, 4, 128,
- 1, 0, 255, 160, 8, 0, 0, 3, 0, 0, 1, 128, 0, 0, 228,
- 128, 0, 0, 228, 160, 4, 0, 0, 4, 0, 0, 2, 128, 0, 0,
- 0, 128, 0, 0, 0, 128, 0, 0, 255, 129, 35, 0, 0, 2, 0,
- 0, 4, 128, 0, 0, 85, 128, 7, 0, 0, 2, 0, 0, 4, 128,
- 0, 0, 170, 128, 6, 0, 0, 2, 1, 0, 1, 128, 0, 0, 170,
- 128, 1, 0, 0, 2, 1, 0, 6, 128, 1, 0, 0, 129, 2, 0,
- 0, 3, 0, 0, 13, 128, 0, 0, 0, 128, 1, 0, 148, 128, 6,
- 0, 0, 2, 1, 0, 1, 128, 1, 0, 170, 160, 5, 0, 0, 3,
- 0, 0, 13, 128, 0, 0, 228, 128, 1, 0, 0, 128, 1, 0, 0,
- 2, 1, 0, 8, 128, 1, 0, 255, 160, 4, 0, 0, 4, 1, 0,
- 7, 128, 0, 0, 248, 128, 0, 0, 170, 160, 1, 0, 255, 128, 88,
- 0, 0, 4, 2, 0, 1, 128, 1, 0, 0, 128, 0, 0, 0, 128,
- 0, 0, 255, 128, 88, 0, 0, 4, 0, 0, 13, 128, 1, 0, 148,
- 128, 4, 0, 68, 160, 4, 0, 230, 160, 1, 0, 0, 2, 2, 0,
- 2, 128, 3, 0, 0, 160, 66, 0, 0, 3, 1, 0, 15, 128, 0,
- 0, 228, 176, 1, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128,
- 2, 0, 228, 128, 0, 8, 228, 160, 5, 0, 0, 3, 2, 0, 7,
- 128, 2, 0, 255, 128, 2, 0, 228, 128, 5, 0, 0, 3, 1, 0,
- 15, 128, 1, 0, 255, 128, 2, 0, 228, 128, 2, 0, 0, 3, 0,
- 0, 8, 128, 0, 0, 255, 128, 0, 0, 0, 128, 88, 0, 0, 4,
- 0, 0, 1, 128, 0, 0, 255, 128, 0, 0, 0, 128, 0, 0, 170,
- 128, 88, 0, 0, 4, 1, 0, 15, 128, 0, 0, 0, 129, 4, 0,
- 170, 160, 1, 0, 228, 128, 88, 0, 0, 4, 0, 0, 15, 128, 0,
- 0, 85, 128, 1, 0, 228, 128, 4, 0, 170, 160, 1, 0, 0, 2,
- 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0, 83, 72, 68,
- 82, 208, 3, 0, 0, 64, 0, 0, 0, 244, 0, 0, 0, 89, 0,
- 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 7, 0, 0, 0, 90,
- 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 90, 0, 0, 3,
- 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0, 4, 0, 112, 16,
- 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24, 0, 4, 0, 112,
- 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0, 3, 50,
- 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3, 194, 16, 16, 0,
- 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0,
- 0, 104, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 9, 50, 0,
- 16, 0, 0, 0, 0, 0, 230, 26, 16, 0, 1, 0, 0, 0, 70,
- 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 54, 0, 0, 6, 66, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32,
- 0, 0, 0, 0, 0, 5, 0, 0, 0, 16, 0, 0, 8, 66, 0,
- 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70,
- 130, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0, 15, 0, 0, 7,
- 18, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0,
- 0, 70, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10,
- 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 56, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0, 0, 5, 0,
- 0, 0, 50, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0, 0, 42,
- 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0,
- 7, 34, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 75, 0, 0, 6, 18,
- 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0, 0,
- 0, 0, 0, 0, 54, 0, 0, 6, 34, 0, 16, 0, 1, 0, 0,
- 0, 10, 0, 16, 128, 65, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 7, 82, 0, 16, 0, 0, 0, 0, 0, 166, 10, 16, 0, 0,
- 0, 0, 0, 6, 1, 16, 0, 1, 0, 0, 0, 14, 0, 0, 8,
- 82, 0, 16, 0, 0, 0, 0, 0, 6, 2, 16, 0, 0, 0, 0,
- 0, 166, 138, 32, 0, 0, 0, 0, 0, 5, 0, 0, 0, 56, 0,
- 0, 8, 50, 0, 16, 0, 1, 0, 0, 0, 134, 0, 16, 0, 0,
- 0, 0, 0, 166, 138, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 29, 0, 0, 9, 50, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16,
- 0, 1, 0, 0, 0, 246, 143, 32, 128, 65, 0, 0, 0, 0, 0,
- 0, 0, 5, 0, 0, 0, 1, 0, 0, 10, 50, 0, 16, 0, 1,
- 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 2, 64, 0, 0,
- 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 42, 0,
- 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0,
- 0, 0, 0, 50, 0, 0, 9, 18, 0, 16, 0, 2, 0, 0, 0,
- 10, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0,
- 0, 42, 0, 16, 0, 0, 0, 0, 0, 54, 0, 0, 5, 34, 0,
- 16, 0, 2, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 63, 69,
- 0, 0, 9, 242, 0, 16, 0, 2, 0, 0, 0, 70, 0, 16, 0,
- 2, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16,
- 0, 0, 0, 0, 0, 31, 0, 4, 3, 26, 0, 16, 0, 0, 0,
- 0, 0, 54, 0, 0, 8, 242, 32, 16, 0, 0, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 62, 0, 0, 1, 21, 0, 0, 1, 52, 0, 0,
- 7, 18, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 1, 0,
- 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 29, 0, 0, 7, 18,
- 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 31, 0, 4, 3, 10, 0, 16,
- 0, 0, 0, 0, 0, 54, 0, 0, 8, 242, 32, 16, 0, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 1, 21, 0, 0, 1,
- 56, 0, 0, 7, 114, 0, 16, 0, 2, 0, 0, 0, 246, 15, 16,
- 0, 2, 0, 0, 0, 70, 2, 16, 0, 2, 0, 0, 0, 69, 0,
- 0, 9, 242, 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 1,
- 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0, 96, 16, 0,
- 1, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16, 0, 0, 0, 0,
- 0, 246, 15, 16, 0, 0, 0, 0, 0, 70, 14, 16, 0, 2, 0,
- 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 33,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 19, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 96,
- 2, 0, 0, 1, 0, 0, 0, 224, 0, 0, 0, 5, 0, 0, 0,
- 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0, 43, 2, 0,
- 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 197, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 210, 0, 0, 0, 2, 0, 0, 0, 5, 0,
- 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 1,
- 0, 0, 0, 12, 0, 0, 0, 214, 0, 0, 0, 2, 0, 0, 0,
- 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0,
- 0, 1, 0, 0, 0, 12, 0, 0, 0, 219, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 115, 83, 97, 109,
- 112, 108, 101, 114, 0, 115, 77, 97, 115, 107, 83, 97, 109, 112, 108,
- 101, 114, 0, 116, 101, 120, 0, 109, 97, 115, 107, 0, 99, 98, 50,
- 0, 171, 219, 0, 0, 0, 7, 0, 0, 0, 248, 0, 0, 0, 112,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 1, 0, 0,
- 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 184, 1, 0,
- 0, 0, 0, 0, 0, 200, 1, 0, 0, 48, 0, 0, 0, 8, 0,
- 0, 0, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 0, 0, 228,
- 1, 0, 0, 64, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0,
- 236, 1, 0, 0, 0, 0, 0, 0, 252, 1, 0, 0, 80, 0, 0,
- 0, 8, 0, 0, 0, 2, 0, 0, 0, 212, 1, 0, 0, 0, 0,
- 0, 0, 4, 2, 0, 0, 88, 0, 0, 0, 4, 0, 0, 0, 2,
- 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 24, 2, 0, 0,
- 92, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 8, 2, 0,
- 0, 0, 0, 0, 0, 32, 2, 0, 0, 96, 0, 0, 0, 4, 0,
- 0, 0, 2, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 68,
- 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85, 115, 101,
- 114, 83, 112, 97, 99, 101, 0, 171, 3, 0, 3, 0, 3, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 109, 101, 110, 115,
- 105, 111, 110, 115, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 100, 105, 102, 102, 0, 171, 171, 171,
- 1, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 99, 101, 110, 116, 101, 114, 49, 0, 65, 0, 171, 171, 0, 0,
- 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114,
- 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100, 105, 117,
- 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82,
- 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67,
- 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48,
- 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 171, 73, 83, 71, 78,
- 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0,
- 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 1, 0, 0, 0, 12, 12, 0, 0, 83, 86, 95, 80, 111, 115,
- 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0,
- 171, 171, 171, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0,
- 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86,
- 95, 84, 97, 114, 103, 101, 116, 0, 171, 171, 242, 101, 0, 0, 0,
- 0, 0, 0, 65, 48, 0, 44, 7, 0, 0, 68, 88, 66, 67, 172,
- 27, 205, 113, 176, 254, 27, 44, 22, 107, 179, 112, 127, 38, 148, 161,
- 1, 0, 0, 0, 44, 7, 0, 0, 6, 0, 0, 0, 56, 0, 0,
- 0, 148, 1, 0, 0, 104, 3, 0, 0, 228, 3, 0, 0, 136, 6,
- 0, 0, 188, 6, 0, 0, 65, 111, 110, 57, 84, 1, 0, 0, 84,
- 1, 0, 0, 0, 2, 254, 255, 252, 0, 0, 0, 88, 0, 0, 0,
- 4, 0, 36, 0, 0, 0, 84, 0, 0, 0, 84, 0, 0, 0, 36,
- 0, 1, 0, 84, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 1, 0, 3, 0,
- 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 254,
- 255, 81, 0, 0, 5, 6, 0, 15, 160, 0, 0, 128, 63, 0, 0,
- 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 5,
- 0, 0, 128, 0, 0, 15, 144, 4, 0, 0, 4, 0, 0, 3, 224,
- 0, 0, 228, 144, 2, 0, 238, 160, 2, 0, 228, 160, 4, 0, 0,
- 4, 0, 0, 3, 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0,
- 228, 160, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 0, 128, 6,
- 0, 0, 160, 5, 0, 0, 3, 0, 0, 4, 128, 0, 0, 170, 128,
- 5, 0, 0, 160, 5, 0, 0, 3, 1, 0, 1, 128, 0, 0, 170,
- 128, 6, 0, 85, 160, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0,
- 85, 129, 6, 0, 0, 160, 2, 0, 0, 3, 0, 0, 3, 192, 0,
- 0, 228, 128, 0, 0, 228, 160, 5, 0, 0, 3, 0, 0, 1, 128,
- 0, 0, 170, 128, 5, 0, 85, 160, 5, 0, 0, 3, 1, 0, 2,
- 128, 0, 0, 0, 128, 6, 0, 85, 160, 1, 0, 0, 2, 1, 0,
- 4, 128, 6, 0, 0, 160, 8, 0, 0, 3, 0, 0, 8, 224, 1,
- 0, 228, 128, 3, 0, 228, 160, 8, 0, 0, 3, 0, 0, 4, 224,
- 1, 0, 228, 128, 4, 0, 228, 160, 1, 0, 0, 2, 0, 0, 12,
- 192, 6, 0, 36, 160, 255, 255, 0, 0, 83, 72, 68, 82, 204, 1,
- 0, 0, 64, 0, 1, 0, 115, 0, 0, 0, 89, 0, 0, 4, 70,
- 142, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 89, 0, 0, 4,
- 70, 142, 32, 0, 1, 0, 0, 0, 4, 0, 0, 0, 95, 0, 0,
- 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0, 0, 4, 242, 32,
- 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101, 0, 0, 3, 50,
- 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 194, 32, 16, 0,
- 1, 0, 0, 0, 104, 0, 0, 2, 2, 0, 0, 0, 54, 0, 0,
- 8, 194, 32, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50,
- 0, 0, 11, 50, 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0,
- 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 70, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0,
- 0, 5, 50, 32, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128,
- 63, 0, 0, 0, 8, 34, 0, 16, 0, 0, 0, 0, 0, 26, 0,
- 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0,
- 0, 128, 63, 56, 0, 0, 8, 50, 0, 16, 0, 0, 0, 0, 0,
- 70, 0, 16, 0, 0, 0, 0, 0, 70, 128, 32, 0, 1, 0, 0,
- 0, 3, 0, 0, 0, 56, 0, 0, 10, 50, 0, 16, 0, 1, 0,
- 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0,
- 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 0, 0, 5, 66, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 128, 63, 16, 0, 0, 8, 66, 32, 16, 0, 1, 0,
- 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 130, 32, 16, 0,
- 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 70, 130, 32,
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32,
- 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230,
- 138, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 70, 128, 32, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65,
- 84, 116, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 82, 68, 69, 70, 156, 2, 0, 0, 2, 0, 0, 0, 100, 0,
- 0, 0, 2, 0, 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0,
- 1, 0, 0, 103, 2, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0,
- 99, 98, 50, 0, 92, 0, 0, 0, 4, 0, 0, 0, 148, 0, 0,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0,
- 0, 0, 7, 0, 0, 0, 52, 1, 0, 0, 112, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 16, 1, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 32,
- 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 40, 1, 0, 0, 48, 0, 0, 0, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 81, 117,
- 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67,
- 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111,
- 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0,
- 171, 171, 220, 1, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 2,
- 0, 0, 0, 244, 1, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0,
- 48, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 16, 2, 0,
- 0, 0, 0, 0, 0, 32, 2, 0, 0, 64, 0, 0, 0, 12, 0,
- 0, 0, 0, 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0, 56,
- 2, 0, 0, 80, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
- 16, 2, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 88, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0,
- 0, 0, 84, 2, 0, 0, 92, 0, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 92, 2, 0, 0,
- 96, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 68, 2, 0,
- 0, 0, 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99,
- 101, 84, 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 0, 171, 3,
- 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 0, 171, 1, 0, 3,
- 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105,
- 102, 102, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 49, 0,
- 65, 0, 171, 171, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 114, 97, 100, 105, 117, 115, 49, 0, 115, 113,
- 95, 114, 97, 100, 105, 117, 115, 49, 0, 77, 105, 99, 114, 111, 115,
- 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104,
- 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54,
- 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 171,
- 171, 171, 73, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8,
- 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79, 83,
- 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83, 71, 78, 104, 0,
- 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12, 0, 0, 92, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
- 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116,
- 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171,
- 171, 225, 111, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 192, 7, 0, 0, 68, 88, 66, 67, 73,
- 174, 125, 52, 147, 212, 172, 159, 223, 39, 1, 144, 137, 10, 201, 206,
- 1, 0, 0, 0, 192, 7, 0, 0, 6, 0, 0, 0, 56, 0, 0,
- 0, 196, 1, 0, 0, 56, 4, 0, 0, 180, 4, 0, 0, 28, 7,
- 0, 0, 140, 7, 0, 0, 65, 111, 110, 57, 132, 1, 0, 0, 132,
- 1, 0, 0, 0, 2, 255, 255, 76, 1, 0, 0, 56, 0, 0, 0,
- 1, 0, 44, 0, 0, 0, 56, 0, 0, 0, 56, 0, 2, 0, 36,
- 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 4, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 255, 255, 81,
- 0, 0, 5, 2, 0, 15, 160, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 0, 0, 0,
- 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0, 144, 0, 8,
- 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1, 8, 15, 160, 5,
- 0, 0, 3, 0, 0, 8, 128, 1, 0, 255, 160, 1, 0, 255, 160,
- 2, 0, 0, 3, 0, 0, 3, 128, 0, 0, 235, 176, 1, 0, 228,
- 161, 90, 0, 0, 4, 0, 0, 8, 128, 0, 0, 228, 128, 0, 0,
- 228, 128, 0, 0, 255, 129, 5, 0, 0, 3, 0, 0, 8, 128, 0,
- 0, 255, 128, 2, 0, 0, 160, 1, 0, 0, 2, 0, 0, 4, 128,
- 1, 0, 255, 160, 8, 0, 0, 3, 0, 0, 1, 128, 0, 0, 228,
- 128, 0, 0, 228, 160, 6, 0, 0, 2, 0, 0, 1, 128, 0, 0,
- 0, 128, 5, 0, 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 0,
- 0, 255, 128, 1, 0, 0, 2, 0, 0, 2, 128, 2, 0, 0, 160,
- 66, 0, 0, 3, 1, 0, 15, 128, 0, 0, 228, 176, 1, 8, 228,
- 160, 66, 0, 0, 3, 2, 0, 15, 128, 0, 0, 228, 128, 0, 8,
- 228, 160, 1, 0, 0, 2, 0, 0, 8, 128, 1, 0, 255, 160, 4,
- 0, 0, 4, 0, 0, 1, 128, 0, 0, 0, 128, 0, 0, 170, 161,
- 0, 0, 255, 129, 5, 0, 0, 3, 2, 0, 7, 128, 2, 0, 255,
- 128, 2, 0, 228, 128, 5, 0, 0, 3, 1, 0, 15, 128, 1, 0,
- 255, 128, 2, 0, 228, 128, 88, 0, 0, 4, 0, 0, 15, 128, 0,
- 0, 0, 128, 2, 0, 85, 160, 1, 0, 228, 128, 1, 0, 0, 2,
- 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0, 83, 72, 68,
- 82, 108, 2, 0, 0, 64, 0, 0, 0, 155, 0, 0, 0, 89, 0,
- 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 6, 0, 0, 0, 90,
- 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 90, 0, 0, 3,
- 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0, 4, 0, 112, 16,
- 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24, 0, 4, 0, 112,
- 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0, 3, 50,
- 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3, 194, 16, 16, 0,
- 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0,
- 0, 104, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 9, 50, 0,
- 16, 0, 0, 0, 0, 0, 230, 26, 16, 0, 1, 0, 0, 0, 70,
- 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 54, 0, 0, 6, 66, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32,
- 0, 0, 0, 0, 0, 5, 0, 0, 0, 16, 0, 0, 8, 66, 0,
- 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70,
- 130, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0, 15, 0, 0, 7,
- 18, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0,
- 0, 70, 0, 16, 0, 0, 0, 0, 0, 50, 0, 0, 12, 18, 0,
- 16, 0, 0, 0, 0, 0, 58, 128, 32, 128, 65, 0, 0, 0, 0,
- 0, 0, 0, 5, 0, 0, 0, 58, 128, 32, 0, 0, 0, 0, 0,
- 5, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 56, 0, 0,
- 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 0, 63, 14, 0, 0, 7, 18,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 56, 0, 0, 8, 66, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 42, 128,
- 32, 0, 0, 0, 0, 0, 4, 0, 0, 0, 29, 0, 0, 9, 66,
- 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 128, 65, 0, 0, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0,
- 0, 54, 0, 0, 5, 34, 0, 16, 0, 0, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 0, 63, 69, 0, 0, 9, 242, 0, 16, 0, 1,
- 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 70, 126, 16, 0,
- 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 31, 0, 4,
- 3, 42, 0, 16, 0, 0, 0, 0, 0, 54, 0, 0, 8, 242, 32,
- 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 1,
- 21, 0, 0, 1, 56, 0, 0, 7, 114, 0, 16, 0, 1, 0, 0,
- 0, 246, 15, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0,
- 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0, 0, 70,
- 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0,
- 0, 96, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16,
- 0, 0, 0, 0, 0, 246, 15, 16, 0, 0, 0, 0, 0, 70, 14,
- 16, 0, 1, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116,
- 0, 0, 0, 19, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
- 68, 69, 70, 96, 2, 0, 0, 1, 0, 0, 0, 224, 0, 0, 0,
- 5, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0,
- 0, 43, 2, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 2, 0,
- 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0,
- 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 214, 0, 0, 0,
- 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255,
- 255, 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 219, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 115, 83, 97, 109, 112, 108, 101, 114, 0, 115, 77, 97, 115, 107, 83,
- 97, 109, 112, 108, 101, 114, 0, 116, 101, 120, 0, 109, 97, 115, 107,
- 0, 99, 98, 50, 0, 171, 219, 0, 0, 0, 7, 0, 0, 0, 248,
- 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 160, 1, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0,
- 0, 184, 1, 0, 0, 0, 0, 0, 0, 200, 1, 0, 0, 48, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 212, 1, 0, 0, 0,
- 0, 0, 0, 228, 1, 0, 0, 64, 0, 0, 0, 12, 0, 0, 0,
- 2, 0, 0, 0, 236, 1, 0, 0, 0, 0, 0, 0, 252, 1, 0,
- 0, 80, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 212, 1,
- 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 88, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0,
- 24, 2, 0, 0, 92, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0,
- 0, 8, 2, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 96, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0,
- 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84,
- 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 0, 171, 3, 0, 3,
- 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105,
- 109, 101, 110, 115, 105, 111, 110, 115, 0, 171, 1, 0, 3, 0, 1,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 102, 102,
- 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 49, 0, 65, 0,
- 171, 171, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 114, 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114,
- 97, 100, 105, 117, 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102,
- 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100,
- 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51,
- 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 171,
- 73, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0,
- 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 3, 3, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 12, 0, 0, 83, 86,
- 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79,
- 79, 82, 68, 0, 171, 171, 171, 79, 83, 71, 78, 44, 0, 0, 0,
- 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0,
- 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171, 171, 37,
- 119, 0, 0, 0, 0, 0, 0, 65, 80, 111, 115, 87, 114, 97, 112,
- 0, 44, 7, 0, 0, 68, 88, 66, 67, 172, 27, 205, 113, 176, 254,
- 27, 44, 22, 107, 179, 112, 127, 38, 148, 161, 1, 0, 0, 0, 44,
- 7, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 148, 1, 0, 0,
- 104, 3, 0, 0, 228, 3, 0, 0, 136, 6, 0, 0, 188, 6, 0,
- 0, 65, 111, 110, 57, 84, 1, 0, 0, 84, 1, 0, 0, 0, 2,
- 254, 255, 252, 0, 0, 0, 88, 0, 0, 0, 4, 0, 36, 0, 0,
- 0, 84, 0, 0, 0, 84, 0, 0, 0, 36, 0, 1, 0, 84, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0,
- 3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 1, 0, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0, 5,
- 6, 0, 15, 160, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0,
- 0, 0, 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0, 0,
- 15, 144, 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144, 2,
- 0, 238, 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 3, 128,
- 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0, 0,
- 3, 0, 0, 4, 128, 0, 0, 0, 128, 6, 0, 0, 160, 5, 0,
- 0, 3, 0, 0, 4, 128, 0, 0, 170, 128, 5, 0, 0, 160, 5,
- 0, 0, 3, 1, 0, 1, 128, 0, 0, 170, 128, 6, 0, 85, 160,
- 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 85, 129, 6, 0, 0,
- 160, 2, 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0,
- 228, 160, 5, 0, 0, 3, 0, 0, 1, 128, 0, 0, 170, 128, 5,
- 0, 85, 160, 5, 0, 0, 3, 1, 0, 2, 128, 0, 0, 0, 128,
- 6, 0, 85, 160, 1, 0, 0, 2, 1, 0, 4, 128, 6, 0, 0,
- 160, 8, 0, 0, 3, 0, 0, 8, 224, 1, 0, 228, 128, 3, 0,
- 228, 160, 8, 0, 0, 3, 0, 0, 4, 224, 1, 0, 228, 128, 4,
- 0, 228, 160, 1, 0, 0, 2, 0, 0, 12, 192, 6, 0, 36, 160,
- 255, 255, 0, 0, 83, 72, 68, 82, 204, 1, 0, 0, 64, 0, 1,
- 0, 115, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 1,
- 0, 0, 0, 4, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0,
- 0, 0, 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0,
- 0, 0, 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0, 104,
- 0, 0, 2, 2, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0,
- 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50, 0,
- 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230,
- 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 50, 32, 16,
- 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0, 0,
- 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0,
- 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 0, 0, 0, 8,
- 34, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 56, 0,
- 0, 8, 50, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0,
- 0, 0, 0, 70, 128, 32, 0, 1, 0, 0, 0, 3, 0, 0, 0,
- 56, 0, 0, 10, 50, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16,
- 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 63, 0, 0,
- 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 66,
- 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63,
- 16, 0, 0, 8, 66, 32, 16, 0, 1, 0, 0, 0, 70, 2, 16,
- 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 8, 130, 32, 16, 0, 1, 0, 0, 0, 70,
- 2, 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0, 1, 0, 0,
- 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0,
- 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,
- 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70,
- 156, 2, 0, 0, 2, 0, 0, 0, 100, 0, 0, 0, 2, 0, 0,
- 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0, 0, 103, 2,
- 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 99, 98, 50, 0, 92,
- 0, 0, 0, 4, 0, 0, 0, 148, 0, 0, 0, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 7, 0, 0,
- 0, 52, 1, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 2,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 16, 1, 0, 0,
- 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 26, 1, 0, 0, 32, 0, 0, 0, 16, 0,
- 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 40,
- 1, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101, 115,
- 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100, 115,
- 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0,
- 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 171, 171, 220, 1, 0,
- 0, 0, 0, 0, 0, 44, 0, 0, 0, 2, 0, 0, 0, 244, 1,
- 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 48, 0, 0, 0, 8,
- 0, 0, 0, 2, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0,
- 32, 2, 0, 0, 64, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 0, 40, 2, 0, 0, 0, 0, 0, 0, 56, 2, 0, 0, 80, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 0,
- 0, 0, 0, 64, 2, 0, 0, 88, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 84, 2, 0,
- 0, 92, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 68, 2,
- 0, 0, 0, 0, 0, 0, 92, 2, 0, 0, 96, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0,
- 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85, 115,
- 101, 114, 83, 112, 97, 99, 101, 0, 171, 3, 0, 3, 0, 3, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 109, 101, 110,
- 115, 105, 111, 110, 115, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 102, 102, 0, 171, 171,
- 171, 1, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 99, 101, 110, 116, 101, 114, 49, 0, 65, 0, 171, 171, 0,
- 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 114, 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100, 105,
- 117, 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40,
- 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32,
- 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54,
- 48, 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 171, 73, 83, 71,
- 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 7, 3, 0, 0, 80, 79, 83, 73, 84, 73, 79, 78,
- 0, 171, 171, 171, 79, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0,
- 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 3, 12, 0, 0, 92, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3,
- 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84,
- 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 250, 126, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 228, 9, 0, 0, 68, 88, 66, 67, 193, 68, 83, 4, 120, 206,
- 206, 65, 213, 56, 189, 186, 120, 85, 235, 59, 1, 0, 0, 0, 228,
- 9, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 128, 2, 0, 0,
- 88, 6, 0, 0, 212, 6, 0, 0, 64, 9, 0, 0, 176, 9, 0,
- 0, 65, 111, 110, 57, 64, 2, 0, 0, 64, 2, 0, 0, 0, 2,
- 255, 255, 8, 2, 0, 0, 56, 0, 0, 0, 1, 0, 44, 0, 0,
- 0, 56, 0, 0, 0, 56, 0, 2, 0, 36, 0, 0, 0, 56, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 4, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 1, 2, 255, 255, 81, 0, 0, 5, 3, 0,
- 15, 160, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0, 128, 63,
- 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 128, 31, 0, 0,
- 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0,
- 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1,
- 8, 15, 160, 2, 0, 0, 3, 0, 0, 3, 128, 0, 0, 235, 176,
- 1, 0, 228, 161, 90, 0, 0, 4, 0, 0, 8, 128, 0, 0, 228,
- 128, 0, 0, 228, 128, 2, 0, 0, 161, 5, 0, 0, 3, 0, 0,
- 8, 128, 0, 0, 255, 128, 1, 0, 170, 160, 1, 0, 0, 2, 0,
- 0, 4, 128, 1, 0, 255, 160, 8, 0, 0, 3, 0, 0, 1, 128,
- 0, 0, 228, 128, 0, 0, 228, 160, 4, 0, 0, 4, 0, 0, 2,
- 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 255, 129, 35, 0,
- 0, 2, 0, 0, 4, 128, 0, 0, 85, 128, 7, 0, 0, 2, 0,
- 0, 4, 128, 0, 0, 170, 128, 6, 0, 0, 2, 1, 0, 1, 128,
- 0, 0, 170, 128, 1, 0, 0, 2, 1, 0, 6, 128, 1, 0, 0,
- 129, 2, 0, 0, 3, 0, 0, 13, 128, 0, 0, 0, 128, 1, 0,
- 148, 128, 6, 0, 0, 2, 1, 0, 1, 128, 1, 0, 170, 160, 5,
- 0, 0, 3, 0, 0, 13, 128, 0, 0, 228, 128, 1, 0, 0, 128,
- 1, 0, 0, 2, 1, 0, 8, 128, 1, 0, 255, 160, 4, 0, 0,
- 4, 1, 0, 7, 128, 0, 0, 248, 128, 0, 0, 170, 160, 1, 0,
- 255, 128, 88, 0, 0, 4, 2, 0, 1, 128, 1, 0, 0, 128, 0,
- 0, 0, 128, 0, 0, 255, 128, 88, 0, 0, 4, 0, 0, 13, 128,
- 1, 0, 148, 128, 4, 0, 68, 160, 4, 0, 230, 160, 1, 0, 0,
- 2, 2, 0, 2, 128, 3, 0, 0, 160, 66, 0, 0, 3, 1, 0,
- 15, 128, 0, 0, 228, 176, 1, 8, 228, 160, 66, 0, 0, 3, 2,
- 0, 15, 128, 2, 0, 228, 128, 0, 8, 228, 160, 5, 0, 0, 3,
- 2, 0, 7, 128, 2, 0, 255, 128, 2, 0, 228, 128, 5, 0, 0,
- 3, 1, 0, 15, 128, 1, 0, 255, 128, 2, 0, 228, 128, 2, 0,
- 0, 3, 0, 0, 8, 128, 0, 0, 255, 128, 0, 0, 0, 128, 88,
- 0, 0, 4, 0, 0, 1, 128, 0, 0, 255, 128, 0, 0, 0, 128,
- 0, 0, 170, 128, 88, 0, 0, 4, 1, 0, 15, 128, 0, 0, 0,
- 129, 4, 0, 170, 160, 1, 0, 228, 128, 88, 0, 0, 4, 0, 0,
- 15, 128, 0, 0, 85, 128, 1, 0, 228, 128, 4, 0, 170, 160, 1,
- 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0,
- 83, 72, 68, 82, 208, 3, 0, 0, 64, 0, 0, 0, 244, 0, 0,
- 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 90,
- 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0, 4,
- 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24, 0,
- 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98, 16,
- 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3, 194,
- 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0,
- 0, 0, 0, 0, 104, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0,
- 9, 50, 0, 16, 0, 0, 0, 0, 0, 230, 26, 16, 0, 1, 0,
- 0, 0, 70, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 54, 0, 0, 6, 66, 0, 16, 0, 0, 0, 0, 0,
- 58, 128, 32, 0, 0, 0, 0, 0, 5, 0, 0, 0, 16, 0, 0,
- 8, 66, 0, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0,
- 0, 0, 70, 130, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0, 15,
- 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0,
- 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 10, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 56, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0,
- 0, 5, 0, 0, 0, 50, 0, 0, 10, 18, 0, 16, 0, 0, 0,
- 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 49, 0, 0, 7, 34, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 75, 0,
- 0, 6, 18, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 128, 129,
- 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 6, 34, 0, 16, 0,
- 1, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 7, 82, 0, 16, 0, 0, 0, 0, 0, 166, 10,
- 16, 0, 0, 0, 0, 0, 6, 1, 16, 0, 1, 0, 0, 0, 14,
- 0, 0, 8, 82, 0, 16, 0, 0, 0, 0, 0, 6, 2, 16, 0,
- 0, 0, 0, 0, 166, 138, 32, 0, 0, 0, 0, 0, 5, 0, 0,
- 0, 56, 0, 0, 8, 50, 0, 16, 0, 1, 0, 0, 0, 134, 0,
- 16, 0, 0, 0, 0, 0, 166, 138, 32, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 29, 0, 0, 9, 50, 0, 16, 0, 1, 0, 0, 0,
- 70, 0, 16, 0, 1, 0, 0, 0, 246, 143, 32, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 10, 50, 0,
- 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0,
- 0, 42, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 50, 0, 0, 9, 18, 0, 16, 0, 2,
- 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0,
- 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 54, 0, 0,
- 5, 34, 0, 16, 0, 2, 0, 0, 0, 1, 64, 0, 0, 0, 0,
- 0, 63, 69, 0, 0, 9, 242, 0, 16, 0, 2, 0, 0, 0, 70,
- 0, 16, 0, 2, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0,
- 0, 96, 16, 0, 0, 0, 0, 0, 31, 0, 4, 3, 26, 0, 16,
- 0, 0, 0, 0, 0, 54, 0, 0, 8, 242, 32, 16, 0, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 1, 21, 0, 0, 1,
- 52, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16,
- 0, 1, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 29, 0,
- 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 31, 0, 4, 3,
- 10, 0, 16, 0, 0, 0, 0, 0, 54, 0, 0, 8, 242, 32, 16,
- 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 1, 21,
- 0, 0, 1, 56, 0, 0, 7, 114, 0, 16, 0, 2, 0, 0, 0,
- 246, 15, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 2, 0, 0,
- 0, 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0, 0, 70, 16,
- 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0,
- 96, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16, 0,
- 0, 0, 0, 0, 246, 15, 16, 0, 0, 0, 0, 0, 70, 14, 16,
- 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0,
- 0, 0, 33, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68,
- 69, 70, 100, 2, 0, 0, 1, 0, 0, 0, 228, 0, 0, 0, 5,
- 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0,
- 47, 2, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 2, 0, 0,
- 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 218, 0, 0, 0, 2,
- 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255,
- 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 223, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 115,
- 87, 114, 97, 112, 83, 97, 109, 112, 108, 101, 114, 0, 115, 77, 97,
- 115, 107, 83, 97, 109, 112, 108, 101, 114, 0, 116, 101, 120, 0, 109,
- 97, 115, 107, 0, 99, 98, 50, 0, 171, 223, 0, 0, 0, 7, 0,
- 0, 0, 252, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 164, 1, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0,
- 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 0, 0, 204, 1, 0,
- 0, 48, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 216, 1,
- 0, 0, 0, 0, 0, 0, 232, 1, 0, 0, 64, 0, 0, 0, 12,
- 0, 0, 0, 2, 0, 0, 0, 240, 1, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 80, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0,
- 0, 216, 1, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 88, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 12, 2, 0, 0, 0,
- 0, 0, 0, 28, 2, 0, 0, 92, 0, 0, 0, 4, 0, 0, 0,
- 2, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0,
- 0, 96, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 12, 2,
- 0, 0, 0, 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97,
- 99, 101, 84, 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 0, 171,
- 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 0, 171, 1, 0,
- 3, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100,
- 105, 102, 102, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 49,
- 0, 65, 0, 171, 171, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 114, 97, 100, 105, 117, 115, 49, 0, 115,
- 113, 95, 114, 97, 100, 105, 117, 115, 49, 0, 77, 105, 99, 114, 111,
- 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83,
- 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32,
- 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0,
- 171, 171, 171, 73, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0,
- 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
- 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 12, 0,
- 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69,
- 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83, 71, 78, 44,
- 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0,
- 171, 171, 62, 134, 0, 0, 0, 0, 0, 0, 65, 48, 87, 114, 97,
- 112, 0, 44, 7, 0, 0, 68, 88, 66, 67, 172, 27, 205, 113, 176,
- 254, 27, 44, 22, 107, 179, 112, 127, 38, 148, 161, 1, 0, 0, 0,
- 44, 7, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 148, 1, 0,
- 0, 104, 3, 0, 0, 228, 3, 0, 0, 136, 6, 0, 0, 188, 6,
- 0, 0, 65, 111, 110, 57, 84, 1, 0, 0, 84, 1, 0, 0, 0,
- 2, 254, 255, 252, 0, 0, 0, 88, 0, 0, 0, 4, 0, 36, 0,
- 0, 0, 84, 0, 0, 0, 84, 0, 0, 0, 36, 0, 1, 0, 84,
- 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 1, 0, 5, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0,
- 5, 6, 0, 15, 160, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0,
- 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0,
- 0, 15, 144, 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144,
- 2, 0, 238, 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 3,
- 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0,
- 0, 3, 0, 0, 4, 128, 0, 0, 0, 128, 6, 0, 0, 160, 5,
- 0, 0, 3, 0, 0, 4, 128, 0, 0, 170, 128, 5, 0, 0, 160,
- 5, 0, 0, 3, 1, 0, 1, 128, 0, 0, 170, 128, 6, 0, 85,
- 160, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 85, 129, 6, 0,
- 0, 160, 2, 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0,
- 0, 228, 160, 5, 0, 0, 3, 0, 0, 1, 128, 0, 0, 170, 128,
- 5, 0, 85, 160, 5, 0, 0, 3, 1, 0, 2, 128, 0, 0, 0,
- 128, 6, 0, 85, 160, 1, 0, 0, 2, 1, 0, 4, 128, 6, 0,
- 0, 160, 8, 0, 0, 3, 0, 0, 8, 224, 1, 0, 228, 128, 3,
- 0, 228, 160, 8, 0, 0, 3, 0, 0, 4, 224, 1, 0, 228, 128,
- 4, 0, 228, 160, 1, 0, 0, 2, 0, 0, 12, 192, 6, 0, 36,
- 160, 255, 255, 0, 0, 83, 72, 68, 82, 204, 1, 0, 0, 64, 0,
- 1, 0, 115, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0,
- 1, 0, 0, 0, 4, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16,
- 0, 0, 0, 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1,
- 0, 0, 0, 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0,
- 104, 0, 0, 2, 2, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16,
- 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50,
- 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0,
- 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 50, 32,
- 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0,
- 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 0, 0, 0,
- 8, 34, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0,
- 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 56,
- 0, 0, 8, 50, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0,
- 0, 0, 0, 0, 70, 128, 32, 0, 1, 0, 0, 0, 3, 0, 0,
- 0, 56, 0, 0, 10, 50, 0, 16, 0, 1, 0, 0, 0, 70, 0,
- 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 63, 0,
- 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5,
- 66, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128,
- 63, 16, 0, 0, 8, 66, 32, 16, 0, 1, 0, 0, 0, 70, 2,
- 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 8, 130, 32, 16, 0, 1, 0, 0, 0,
- 70, 2, 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0, 1, 0,
- 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0,
- 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69,
- 70, 156, 2, 0, 0, 2, 0, 0, 0, 100, 0, 0, 0, 2, 0,
- 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0, 0, 103,
- 2, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 99, 98, 50, 0,
- 92, 0, 0, 0, 4, 0, 0, 0, 148, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 7, 0,
- 0, 0, 52, 1, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 16, 1, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 32, 0, 0, 0, 16,
- 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 40, 1, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101,
- 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100,
- 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115,
- 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 171, 171, 220, 1,
- 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 2, 0, 0, 0, 244,
- 1, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 48, 0, 0, 0,
- 8, 0, 0, 0, 2, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0,
- 0, 32, 2, 0, 0, 64, 0, 0, 0, 12, 0, 0, 0, 0, 0,
- 0, 0, 40, 2, 0, 0, 0, 0, 0, 0, 56, 2, 0, 0, 80,
- 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0,
- 0, 0, 0, 0, 64, 2, 0, 0, 88, 0, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 84, 2,
- 0, 0, 92, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 68,
- 2, 0, 0, 0, 0, 0, 0, 92, 2, 0, 0, 96, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 0,
- 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85,
- 115, 101, 114, 83, 112, 97, 99, 101, 0, 171, 3, 0, 3, 0, 3,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 109, 101,
- 110, 115, 105, 111, 110, 115, 0, 171, 1, 0, 3, 0, 1, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 102, 102, 0, 171,
- 171, 171, 1, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 99, 101, 110, 116, 101, 114, 49, 0, 65, 0, 171, 171,
- 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 114, 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100,
- 105, 117, 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32,
- 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114,
- 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57,
- 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 171, 73, 83,
- 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 7, 3, 0, 0, 80, 79, 83, 73, 84, 73, 79,
- 78, 0, 171, 171, 171, 79, 83, 71, 78, 104, 0, 0, 0, 3, 0,
- 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 1, 0, 0, 0, 3, 12, 0, 0, 92, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12,
- 3, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0,
- 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 53, 144, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 196, 7, 0, 0, 68, 88, 66, 67, 223, 174, 80, 104, 241,
- 52, 44, 173, 100, 134, 52, 219, 15, 210, 214, 245, 1, 0, 0, 0,
- 196, 7, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 196, 1, 0,
- 0, 56, 4, 0, 0, 180, 4, 0, 0, 32, 7, 0, 0, 144, 7,
- 0, 0, 65, 111, 110, 57, 132, 1, 0, 0, 132, 1, 0, 0, 0,
- 2, 255, 255, 76, 1, 0, 0, 56, 0, 0, 0, 1, 0, 44, 0,
- 0, 0, 56, 0, 0, 0, 56, 0, 2, 0, 36, 0, 0, 0, 56,
- 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 4, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 1, 2, 255, 255, 81, 0, 0, 5, 2,
- 0, 15, 160, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 31, 0, 0, 2, 0, 0, 0, 128, 0, 0, 15,
- 176, 31, 0, 0, 2, 0, 0, 0, 144, 0, 8, 15, 160, 31, 0,
- 0, 2, 0, 0, 0, 144, 1, 8, 15, 160, 5, 0, 0, 3, 0,
- 0, 8, 128, 1, 0, 255, 160, 1, 0, 255, 160, 2, 0, 0, 3,
- 0, 0, 3, 128, 0, 0, 235, 176, 1, 0, 228, 161, 90, 0, 0,
- 4, 0, 0, 8, 128, 0, 0, 228, 128, 0, 0, 228, 128, 0, 0,
- 255, 129, 5, 0, 0, 3, 0, 0, 8, 128, 0, 0, 255, 128, 2,
- 0, 0, 160, 1, 0, 0, 2, 0, 0, 4, 128, 1, 0, 255, 160,
- 8, 0, 0, 3, 0, 0, 1, 128, 0, 0, 228, 128, 0, 0, 228,
- 160, 6, 0, 0, 2, 0, 0, 1, 128, 0, 0, 0, 128, 5, 0,
- 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 0, 0, 255, 128, 1,
- 0, 0, 2, 0, 0, 2, 128, 2, 0, 0, 160, 66, 0, 0, 3,
- 1, 0, 15, 128, 0, 0, 228, 176, 1, 8, 228, 160, 66, 0, 0,
- 3, 2, 0, 15, 128, 0, 0, 228, 128, 0, 8, 228, 160, 1, 0,
- 0, 2, 0, 0, 8, 128, 1, 0, 255, 160, 4, 0, 0, 4, 0,
- 0, 1, 128, 0, 0, 0, 128, 0, 0, 170, 161, 0, 0, 255, 129,
- 5, 0, 0, 3, 2, 0, 7, 128, 2, 0, 255, 128, 2, 0, 228,
- 128, 5, 0, 0, 3, 1, 0, 15, 128, 1, 0, 255, 128, 2, 0,
- 228, 128, 88, 0, 0, 4, 0, 0, 15, 128, 0, 0, 0, 128, 2,
- 0, 85, 160, 1, 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128,
- 0, 0, 228, 128, 255, 255, 0, 0, 83, 72, 68, 82, 108, 2, 0,
- 0, 64, 0, 0, 0, 155, 0, 0, 0, 89, 0, 0, 4, 70, 142,
- 32, 0, 0, 0, 0, 0, 6, 0, 0, 0, 90, 0, 0, 3, 0,
- 96, 16, 0, 0, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0,
- 1, 0, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0,
- 0, 85, 85, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0,
- 0, 0, 85, 85, 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1,
- 0, 0, 0, 98, 16, 0, 3, 194, 16, 16, 0, 1, 0, 0, 0,
- 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0, 0, 104, 0, 0,
- 2, 2, 0, 0, 0, 0, 0, 0, 9, 50, 0, 16, 0, 0, 0,
- 0, 0, 230, 26, 16, 0, 1, 0, 0, 0, 70, 128, 32, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 54, 0, 0, 6,
- 66, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 0, 0, 0, 0,
- 0, 5, 0, 0, 0, 16, 0, 0, 8, 66, 0, 16, 0, 0, 0,
- 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70, 130, 32, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 15, 0, 0, 7, 18, 0, 16, 0,
- 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16,
- 0, 0, 0, 0, 0, 50, 0, 0, 12, 18, 0, 16, 0, 0, 0,
- 0, 0, 58, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 58, 128, 32, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 18, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 0, 63, 14, 0, 0, 7, 18, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 0,
- 0, 0, 0, 0, 56, 0, 0, 8, 66, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0,
- 0, 0, 4, 0, 0, 0, 29, 0, 0, 9, 66, 0, 16, 0, 0,
- 0, 0, 0, 58, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 54, 0, 0,
- 5, 34, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0,
- 0, 63, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 70,
- 0, 16, 0, 0, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0,
- 0, 96, 16, 0, 0, 0, 0, 0, 31, 0, 4, 3, 42, 0, 16,
- 0, 0, 0, 0, 0, 54, 0, 0, 8, 242, 32, 16, 0, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 1, 21, 0, 0, 1,
- 56, 0, 0, 7, 114, 0, 16, 0, 1, 0, 0, 0, 246, 15, 16,
- 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 69, 0,
- 0, 9, 242, 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 1,
- 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0, 96, 16, 0,
- 1, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16, 0, 0, 0, 0,
- 0, 246, 15, 16, 0, 0, 0, 0, 0, 70, 14, 16, 0, 1, 0,
- 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 19,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 100,
- 2, 0, 0, 1, 0, 0, 0, 228, 0, 0, 0, 5, 0, 0, 0,
- 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0, 47, 2, 0,
- 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 201, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 214, 0, 0, 0, 2, 0, 0, 0, 5, 0,
- 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 1,
- 0, 0, 0, 12, 0, 0, 0, 218, 0, 0, 0, 2, 0, 0, 0,
- 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0,
- 0, 1, 0, 0, 0, 12, 0, 0, 0, 223, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 115, 87, 114, 97,
- 112, 83, 97, 109, 112, 108, 101, 114, 0, 115, 77, 97, 115, 107, 83,
- 97, 109, 112, 108, 101, 114, 0, 116, 101, 120, 0, 109, 97, 115, 107,
- 0, 99, 98, 50, 0, 171, 223, 0, 0, 0, 7, 0, 0, 0, 252,
- 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 164, 1, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0,
- 0, 188, 1, 0, 0, 0, 0, 0, 0, 204, 1, 0, 0, 48, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 216, 1, 0, 0, 0,
- 0, 0, 0, 232, 1, 0, 0, 64, 0, 0, 0, 12, 0, 0, 0,
- 2, 0, 0, 0, 240, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 80, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 216, 1,
- 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 88, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0,
- 28, 2, 0, 0, 92, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0,
- 0, 12, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 96, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0,
- 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84,
- 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 0, 171, 3, 0, 3,
- 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105,
- 109, 101, 110, 115, 105, 111, 110, 115, 0, 171, 1, 0, 3, 0, 1,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 102, 102,
- 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 49, 0, 65, 0,
- 171, 171, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 114, 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114,
- 97, 100, 105, 117, 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102,
- 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100,
- 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51,
- 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 171,
- 73, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0,
- 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 3, 3, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 12, 0, 0, 83, 86,
- 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79,
- 79, 82, 68, 0, 171, 171, 171, 79, 83, 71, 78, 44, 0, 0, 0,
- 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0,
- 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171, 171, 121,
- 151, 0, 0, 0, 0, 0, 0, 65, 80, 111, 115, 77, 105, 114, 114,
- 111, 114, 0, 44, 7, 0, 0, 68, 88, 66, 67, 172, 27, 205, 113,
- 176, 254, 27, 44, 22, 107, 179, 112, 127, 38, 148, 161, 1, 0, 0,
- 0, 44, 7, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 148, 1,
- 0, 0, 104, 3, 0, 0, 228, 3, 0, 0, 136, 6, 0, 0, 188,
- 6, 0, 0, 65, 111, 110, 57, 84, 1, 0, 0, 84, 1, 0, 0,
- 0, 2, 254, 255, 252, 0, 0, 0, 88, 0, 0, 0, 4, 0, 36,
- 0, 0, 0, 84, 0, 0, 0, 84, 0, 0, 0, 36, 0, 1, 0,
- 84, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 2, 0, 3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 1, 0, 5,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0,
- 0, 5, 6, 0, 15, 160, 0, 0, 128, 63, 0, 0, 0, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128,
- 0, 0, 15, 144, 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228,
- 144, 2, 0, 238, 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0,
- 3, 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2,
- 0, 0, 3, 0, 0, 4, 128, 0, 0, 0, 128, 6, 0, 0, 160,
- 5, 0, 0, 3, 0, 0, 4, 128, 0, 0, 170, 128, 5, 0, 0,
- 160, 5, 0, 0, 3, 1, 0, 1, 128, 0, 0, 170, 128, 6, 0,
- 85, 160, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 85, 129, 6,
- 0, 0, 160, 2, 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128,
- 0, 0, 228, 160, 5, 0, 0, 3, 0, 0, 1, 128, 0, 0, 170,
- 128, 5, 0, 85, 160, 5, 0, 0, 3, 1, 0, 2, 128, 0, 0,
- 0, 128, 6, 0, 85, 160, 1, 0, 0, 2, 1, 0, 4, 128, 6,
- 0, 0, 160, 8, 0, 0, 3, 0, 0, 8, 224, 1, 0, 228, 128,
- 3, 0, 228, 160, 8, 0, 0, 3, 0, 0, 4, 224, 1, 0, 228,
- 128, 4, 0, 228, 160, 1, 0, 0, 2, 0, 0, 12, 192, 6, 0,
- 36, 160, 255, 255, 0, 0, 83, 72, 68, 82, 204, 1, 0, 0, 64,
- 0, 1, 0, 115, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32,
- 0, 1, 0, 0, 0, 4, 0, 0, 0, 95, 0, 0, 3, 50, 16,
- 16, 0, 0, 0, 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0,
- 1, 0, 0, 0, 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0,
- 0, 104, 0, 0, 2, 2, 0, 0, 0, 54, 0, 0, 8, 194, 32,
- 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11,
- 50, 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0,
- 0, 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 50,
- 32, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 0, 0,
- 0, 8, 34, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63,
- 56, 0, 0, 8, 50, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16,
- 0, 0, 0, 0, 0, 70, 128, 32, 0, 1, 0, 0, 0, 3, 0,
- 0, 0, 56, 0, 0, 10, 50, 0, 16, 0, 1, 0, 0, 0, 70,
- 0, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 63,
- 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0,
- 5, 66, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0,
- 128, 63, 16, 0, 0, 8, 66, 32, 16, 0, 1, 0, 0, 0, 70,
- 2, 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 16, 0, 0, 8, 130, 32, 16, 0, 1, 0, 0,
- 0, 70, 2, 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0, 1,
- 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0,
- 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68,
- 69, 70, 156, 2, 0, 0, 2, 0, 0, 0, 100, 0, 0, 0, 2,
- 0, 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0, 0,
- 103, 2, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 99, 98, 50,
- 0, 92, 0, 0, 0, 4, 0, 0, 0, 148, 0, 0, 0, 64, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 7,
- 0, 0, 0, 52, 1, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,
- 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 16, 1,
- 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 32, 0, 0, 0,
- 16, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 40, 1, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68,
- 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114,
- 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100,
- 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 171, 171, 220,
- 1, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 2, 0, 0, 0,
- 244, 1, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 48, 0, 0,
- 0, 8, 0, 0, 0, 2, 0, 0, 0, 16, 2, 0, 0, 0, 0,
- 0, 0, 32, 2, 0, 0, 64, 0, 0, 0, 12, 0, 0, 0, 0,
- 0, 0, 0, 40, 2, 0, 0, 0, 0, 0, 0, 56, 2, 0, 0,
- 80, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 16, 2, 0,
- 0, 0, 0, 0, 0, 64, 2, 0, 0, 88, 0, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0, 84,
- 2, 0, 0, 92, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 68, 2, 0, 0, 0, 0, 0, 0, 92, 2, 0, 0, 96, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0,
- 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84, 111,
- 85, 115, 101, 114, 83, 112, 97, 99, 101, 0, 171, 3, 0, 3, 0,
- 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 109,
- 101, 110, 115, 105, 111, 110, 115, 0, 171, 1, 0, 3, 0, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 102, 102, 0,
- 171, 171, 171, 1, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 49, 0, 65, 0, 171,
- 171, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 114, 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114, 97,
- 100, 105, 117, 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116,
- 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101,
- 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46,
- 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 171, 73,
- 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79, 83, 73, 84, 73,
- 79, 78, 0, 171, 171, 171, 79, 83, 71, 78, 104, 0, 0, 0, 3,
- 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 1, 0, 0, 0, 3, 12, 0, 0, 92, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110,
- 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 84, 159,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 232, 9, 0, 0, 68, 88, 66, 67, 48, 133, 157, 76,
- 135, 209, 82, 153, 49, 138, 172, 57, 31, 63, 161, 231, 1, 0, 0,
- 0, 232, 9, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 128, 2,
- 0, 0, 88, 6, 0, 0, 212, 6, 0, 0, 68, 9, 0, 0, 180,
- 9, 0, 0, 65, 111, 110, 57, 64, 2, 0, 0, 64, 2, 0, 0,
- 0, 2, 255, 255, 8, 2, 0, 0, 56, 0, 0, 0, 1, 0, 44,
- 0, 0, 0, 56, 0, 0, 0, 56, 0, 2, 0, 36, 0, 0, 0,
- 56, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 4, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 1, 2, 255, 255, 81, 0, 0, 5,
- 3, 0, 15, 160, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0,
- 128, 63, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 128, 31,
- 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2,
- 0, 0, 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0,
- 144, 1, 8, 15, 160, 2, 0, 0, 3, 0, 0, 3, 128, 0, 0,
- 235, 176, 1, 0, 228, 161, 90, 0, 0, 4, 0, 0, 8, 128, 0,
- 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 161, 5, 0, 0, 3,
- 0, 0, 8, 128, 0, 0, 255, 128, 1, 0, 170, 160, 1, 0, 0,
- 2, 0, 0, 4, 128, 1, 0, 255, 160, 8, 0, 0, 3, 0, 0,
- 1, 128, 0, 0, 228, 128, 0, 0, 228, 160, 4, 0, 0, 4, 0,
- 0, 2, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 255, 129,
- 35, 0, 0, 2, 0, 0, 4, 128, 0, 0, 85, 128, 7, 0, 0,
- 2, 0, 0, 4, 128, 0, 0, 170, 128, 6, 0, 0, 2, 1, 0,
- 1, 128, 0, 0, 170, 128, 1, 0, 0, 2, 1, 0, 6, 128, 1,
- 0, 0, 129, 2, 0, 0, 3, 0, 0, 13, 128, 0, 0, 0, 128,
- 1, 0, 148, 128, 6, 0, 0, 2, 1, 0, 1, 128, 1, 0, 170,
- 160, 5, 0, 0, 3, 0, 0, 13, 128, 0, 0, 228, 128, 1, 0,
- 0, 128, 1, 0, 0, 2, 1, 0, 8, 128, 1, 0, 255, 160, 4,
- 0, 0, 4, 1, 0, 7, 128, 0, 0, 248, 128, 0, 0, 170, 160,
- 1, 0, 255, 128, 88, 0, 0, 4, 2, 0, 1, 128, 1, 0, 0,
- 128, 0, 0, 0, 128, 0, 0, 255, 128, 88, 0, 0, 4, 0, 0,
- 13, 128, 1, 0, 148, 128, 4, 0, 68, 160, 4, 0, 230, 160, 1,
- 0, 0, 2, 2, 0, 2, 128, 3, 0, 0, 160, 66, 0, 0, 3,
- 1, 0, 15, 128, 0, 0, 228, 176, 1, 8, 228, 160, 66, 0, 0,
- 3, 2, 0, 15, 128, 2, 0, 228, 128, 0, 8, 228, 160, 5, 0,
- 0, 3, 2, 0, 7, 128, 2, 0, 255, 128, 2, 0, 228, 128, 5,
- 0, 0, 3, 1, 0, 15, 128, 1, 0, 255, 128, 2, 0, 228, 128,
- 2, 0, 0, 3, 0, 0, 8, 128, 0, 0, 255, 128, 0, 0, 0,
- 128, 88, 0, 0, 4, 0, 0, 1, 128, 0, 0, 255, 128, 0, 0,
- 0, 128, 0, 0, 170, 128, 88, 0, 0, 4, 1, 0, 15, 128, 0,
- 0, 0, 129, 4, 0, 170, 160, 1, 0, 228, 128, 88, 0, 0, 4,
- 0, 0, 15, 128, 0, 0, 85, 128, 1, 0, 228, 128, 4, 0, 170,
- 160, 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255,
- 0, 0, 83, 72, 68, 82, 208, 3, 0, 0, 64, 0, 0, 0, 244,
- 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0,
- 0, 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24,
- 0, 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88,
- 24, 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0,
- 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0,
- 3, 194, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32,
- 16, 0, 0, 0, 0, 0, 104, 0, 0, 2, 3, 0, 0, 0, 0,
- 0, 0, 9, 50, 0, 16, 0, 0, 0, 0, 0, 230, 26, 16, 0,
- 1, 0, 0, 0, 70, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0,
- 0, 5, 0, 0, 0, 54, 0, 0, 6, 66, 0, 16, 0, 0, 0,
- 0, 0, 58, 128, 32, 0, 0, 0, 0, 0, 5, 0, 0, 0, 16,
- 0, 0, 8, 66, 0, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0,
- 0, 0, 0, 0, 70, 130, 32, 0, 0, 0, 0, 0, 4, 0, 0,
- 0, 15, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 70, 0,
- 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0,
- 0, 0, 0, 0, 10, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0,
- 0, 6, 0, 0, 0, 56, 0, 0, 8, 18, 0, 16, 0, 0, 0,
- 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0,
- 0, 0, 0, 5, 0, 0, 0, 50, 0, 0, 10, 18, 0, 16, 0,
- 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 0, 0,
- 0, 0, 49, 0, 0, 7, 34, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0,
- 75, 0, 0, 6, 18, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16,
- 128, 129, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 6, 34, 0,
- 16, 0, 1, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 7, 82, 0, 16, 0, 0, 0, 0, 0,
- 166, 10, 16, 0, 0, 0, 0, 0, 6, 1, 16, 0, 1, 0, 0,
- 0, 14, 0, 0, 8, 82, 0, 16, 0, 0, 0, 0, 0, 6, 2,
- 16, 0, 0, 0, 0, 0, 166, 138, 32, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 56, 0, 0, 8, 50, 0, 16, 0, 1, 0, 0, 0,
- 134, 0, 16, 0, 0, 0, 0, 0, 166, 138, 32, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 29, 0, 0, 9, 50, 0, 16, 0, 1, 0,
- 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 246, 143, 32, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 10,
- 50, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 1, 0, 0,
- 0, 2, 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 18, 0, 16, 0, 0,
- 0, 0, 0, 42, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 50, 0, 0, 9, 18, 0, 16,
- 0, 2, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 54,
- 0, 0, 5, 34, 0, 16, 0, 2, 0, 0, 0, 1, 64, 0, 0,
- 0, 0, 0, 63, 69, 0, 0, 9, 242, 0, 16, 0, 2, 0, 0,
- 0, 70, 0, 16, 0, 2, 0, 0, 0, 70, 126, 16, 0, 0, 0,
- 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 31, 0, 4, 3, 26,
- 0, 16, 0, 0, 0, 0, 0, 54, 0, 0, 8, 242, 32, 16, 0,
- 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 1, 21, 0,
- 0, 1, 52, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 26,
- 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0,
- 29, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 31, 0,
- 4, 3, 10, 0, 16, 0, 0, 0, 0, 0, 54, 0, 0, 8, 242,
- 32, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0,
- 1, 21, 0, 0, 1, 56, 0, 0, 7, 114, 0, 16, 0, 2, 0,
- 0, 0, 246, 15, 16, 0, 2, 0, 0, 0, 70, 2, 16, 0, 2,
- 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0, 0,
- 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0,
- 0, 0, 96, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 242, 32,
- 16, 0, 0, 0, 0, 0, 246, 15, 16, 0, 0, 0, 0, 0, 70,
- 14, 16, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84,
- 116, 0, 0, 0, 33, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 82, 68, 69, 70, 104, 2, 0, 0, 1, 0, 0, 0, 232, 0, 0,
- 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1,
- 0, 0, 51, 2, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 2,
- 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255,
- 0, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 220, 0, 0,
- 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255,
- 255, 255, 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 225,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 115, 77, 105, 114, 114, 111, 114, 83, 97, 109, 112, 108, 101, 114,
- 0, 115, 77, 97, 115, 107, 83, 97, 109, 112, 108, 101, 114, 0, 116,
- 101, 120, 0, 109, 97, 115, 107, 0, 99, 98, 50, 0, 171, 171, 171,
- 225, 0, 0, 0, 7, 0, 0, 0, 0, 1, 0, 0, 112, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0,
- 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 192, 1, 0, 0, 0,
- 0, 0, 0, 208, 1, 0, 0, 48, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 0, 0, 236, 1, 0,
- 0, 64, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 244, 1,
- 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 80, 0, 0, 0, 8,
- 0, 0, 0, 2, 0, 0, 0, 220, 1, 0, 0, 0, 0, 0, 0,
- 12, 2, 0, 0, 88, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0,
- 0, 16, 2, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 92, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 16, 2, 0, 0, 0,
- 0, 0, 0, 40, 2, 0, 0, 96, 0, 0, 0, 4, 0, 0, 0,
- 2, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 68, 101, 118,
- 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85, 115, 101, 114, 83,
- 112, 97, 99, 101, 0, 171, 3, 0, 3, 0, 3, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 100, 105, 109, 101, 110, 115, 105, 111,
- 110, 115, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 100, 105, 102, 102, 0, 171, 171, 171, 1, 0,
- 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,
- 101, 110, 116, 101, 114, 49, 0, 65, 0, 171, 171, 0, 0, 3, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 97, 100,
- 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100, 105, 117, 115, 49,
- 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32,
- 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109,
- 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46,
- 49, 54, 51, 56, 52, 0, 171, 171, 171, 73, 83, 71, 78, 104, 0,
- 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
- 0, 0, 0, 12, 12, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116,
- 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171,
- 171, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84,
- 97, 114, 103, 101, 116, 0, 171, 171, 152, 166, 0, 0, 0, 0, 0,
- 0, 65, 48, 77, 105, 114, 114, 111, 114, 0, 44, 7, 0, 0, 68,
- 88, 66, 67, 172, 27, 205, 113, 176, 254, 27, 44, 22, 107, 179, 112,
- 127, 38, 148, 161, 1, 0, 0, 0, 44, 7, 0, 0, 6, 0, 0,
- 0, 56, 0, 0, 0, 148, 1, 0, 0, 104, 3, 0, 0, 228, 3,
- 0, 0, 136, 6, 0, 0, 188, 6, 0, 0, 65, 111, 110, 57, 84,
- 1, 0, 0, 84, 1, 0, 0, 0, 2, 254, 255, 252, 0, 0, 0,
- 88, 0, 0, 0, 4, 0, 36, 0, 0, 0, 84, 0, 0, 0, 84,
- 0, 0, 0, 36, 0, 1, 0, 84, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0,
- 1, 0, 3, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 254, 255, 81, 0, 0, 5, 6, 0, 15, 160, 0, 0,
- 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4, 0, 0, 4,
- 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160, 2, 0, 228,
- 160, 4, 0, 0, 4, 0, 0, 3, 128, 0, 0, 228, 144, 1, 0,
- 238, 160, 1, 0, 228, 160, 2, 0, 0, 3, 0, 0, 4, 128, 0,
- 0, 0, 128, 6, 0, 0, 160, 5, 0, 0, 3, 0, 0, 4, 128,
- 0, 0, 170, 128, 5, 0, 0, 160, 5, 0, 0, 3, 1, 0, 1,
- 128, 0, 0, 170, 128, 6, 0, 85, 160, 2, 0, 0, 3, 0, 0,
- 4, 128, 0, 0, 85, 129, 6, 0, 0, 160, 2, 0, 0, 3, 0,
- 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160, 5, 0, 0, 3,
- 0, 0, 1, 128, 0, 0, 170, 128, 5, 0, 85, 160, 5, 0, 0,
- 3, 1, 0, 2, 128, 0, 0, 0, 128, 6, 0, 85, 160, 1, 0,
- 0, 2, 1, 0, 4, 128, 6, 0, 0, 160, 8, 0, 0, 3, 0,
- 0, 8, 224, 1, 0, 228, 128, 3, 0, 228, 160, 8, 0, 0, 3,
- 0, 0, 4, 224, 1, 0, 228, 128, 4, 0, 228, 160, 1, 0, 0,
- 2, 0, 0, 12, 192, 6, 0, 36, 160, 255, 255, 0, 0, 83, 72,
- 68, 82, 204, 1, 0, 0, 64, 0, 1, 0, 115, 0, 0, 0, 89,
- 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 89, 0, 0, 4, 70, 142, 32, 0, 1, 0, 0, 0, 4, 0, 0,
- 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0,
- 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101,
- 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3,
- 194, 32, 16, 0, 1, 0, 0, 0, 104, 0, 0, 2, 2, 0, 0,
- 0, 54, 0, 0, 8, 194, 32, 16, 0, 0, 0, 0, 0, 2, 64,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 63, 50, 0, 0, 11, 50, 0, 16, 0, 0, 0, 0, 0,
- 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 54, 0, 0, 5, 50, 32, 16, 0, 0, 0, 0, 0, 70,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 16, 0,
- 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0,
- 0, 0, 0, 128, 63, 0, 0, 0, 8, 34, 0, 16, 0, 0, 0,
- 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1,
- 64, 0, 0, 0, 0, 128, 63, 56, 0, 0, 8, 50, 0, 16, 0,
- 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 70, 128, 32,
- 0, 1, 0, 0, 0, 3, 0, 0, 0, 56, 0, 0, 10, 50, 0,
- 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0,
- 0, 0, 0, 0, 54, 0, 0, 5, 66, 0, 16, 0, 1, 0, 0,
- 0, 1, 64, 0, 0, 0, 0, 128, 63, 16, 0, 0, 8, 66, 32,
- 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 70,
- 130, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8,
- 130, 32, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0,
- 0, 70, 130, 32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 50, 0,
- 0, 11, 50, 32, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0,
- 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 70, 128, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 62, 0, 0,
- 1, 83, 84, 65, 84, 116, 0, 0, 0, 12, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 82, 68, 69, 70, 156, 2, 0, 0, 2, 0,
- 0, 0, 100, 0, 0, 0, 2, 0, 0, 0, 28, 0, 0, 0, 0,
- 4, 254, 255, 0, 1, 0, 0, 103, 2, 0, 0, 92, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 99, 98, 48, 0, 99, 98, 50, 0, 92, 0, 0, 0, 4, 0, 0,
- 0, 148, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 96, 0, 0, 0, 7, 0, 0, 0, 52, 1, 0, 0, 112,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0,
- 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 16, 1, 0, 0, 16, 0, 0, 0, 16, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 26,
- 1, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 48, 0, 0,
- 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 81, 117, 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1,
- 0, 3, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84,
- 101, 120, 67, 111, 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111,
- 108, 111, 114, 0, 171, 171, 220, 1, 0, 0, 0, 0, 0, 0, 44,
- 0, 0, 0, 2, 0, 0, 0, 244, 1, 0, 0, 0, 0, 0, 0,
- 4, 2, 0, 0, 48, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0,
- 0, 16, 2, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 64, 0,
- 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 40, 2, 0, 0, 0,
- 0, 0, 0, 56, 2, 0, 0, 80, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 64, 2, 0,
- 0, 88, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 68, 2,
- 0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 92, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 68, 2, 0, 0, 0, 0, 0, 0,
- 92, 2, 0, 0, 96, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
- 0, 68, 2, 0, 0, 0, 0, 0, 0, 68, 101, 118, 105, 99, 101,
- 83, 112, 97, 99, 101, 84, 111, 85, 115, 101, 114, 83, 112, 97, 99,
- 101, 0, 171, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 0,
- 171, 1, 0, 3, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 100, 105, 102, 102, 0, 171, 171, 171, 1, 0, 3, 0, 1,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 101, 110, 116,
- 101, 114, 49, 0, 65, 0, 171, 171, 0, 0, 3, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 97, 100, 105, 117, 115,
- 49, 0, 115, 113, 95, 114, 97, 100, 105, 117, 115, 49, 0, 77, 105,
- 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83,
- 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108,
- 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51,
- 56, 52, 0, 171, 171, 171, 73, 83, 71, 78, 44, 0, 0, 0, 1,
- 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0,
- 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83,
- 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12,
- 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80,
- 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82,
- 68, 0, 171, 171, 171, 149, 176, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 200, 7, 0, 0, 68,
- 88, 66, 67, 238, 212, 160, 43, 129, 11, 44, 225, 62, 162, 102, 35,
- 9, 220, 80, 177, 1, 0, 0, 0, 200, 7, 0, 0, 6, 0, 0,
- 0, 56, 0, 0, 0, 196, 1, 0, 0, 56, 4, 0, 0, 180, 4,
- 0, 0, 36, 7, 0, 0, 148, 7, 0, 0, 65, 111, 110, 57, 132,
- 1, 0, 0, 132, 1, 0, 0, 0, 2, 255, 255, 76, 1, 0, 0,
- 56, 0, 0, 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0, 56,
- 0, 2, 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, 1,
- 1, 0, 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1,
- 2, 255, 255, 81, 0, 0, 5, 2, 0, 15, 160, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0,
- 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0,
- 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1,
- 8, 15, 160, 5, 0, 0, 3, 0, 0, 8, 128, 1, 0, 255, 160,
- 1, 0, 255, 160, 2, 0, 0, 3, 0, 0, 3, 128, 0, 0, 235,
- 176, 1, 0, 228, 161, 90, 0, 0, 4, 0, 0, 8, 128, 0, 0,
- 228, 128, 0, 0, 228, 128, 0, 0, 255, 129, 5, 0, 0, 3, 0,
- 0, 8, 128, 0, 0, 255, 128, 2, 0, 0, 160, 1, 0, 0, 2,
- 0, 0, 4, 128, 1, 0, 255, 160, 8, 0, 0, 3, 0, 0, 1,
- 128, 0, 0, 228, 128, 0, 0, 228, 160, 6, 0, 0, 2, 0, 0,
- 1, 128, 0, 0, 0, 128, 5, 0, 0, 3, 0, 0, 1, 128, 0,
- 0, 0, 128, 0, 0, 255, 128, 1, 0, 0, 2, 0, 0, 2, 128,
- 2, 0, 0, 160, 66, 0, 0, 3, 1, 0, 15, 128, 0, 0, 228,
- 176, 1, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 0, 0,
- 228, 128, 0, 8, 228, 160, 1, 0, 0, 2, 0, 0, 8, 128, 1,
- 0, 255, 160, 4, 0, 0, 4, 0, 0, 1, 128, 0, 0, 0, 128,
- 0, 0, 170, 161, 0, 0, 255, 129, 5, 0, 0, 3, 2, 0, 7,
- 128, 2, 0, 255, 128, 2, 0, 228, 128, 5, 0, 0, 3, 1, 0,
- 15, 128, 1, 0, 255, 128, 2, 0, 228, 128, 88, 0, 0, 4, 0,
- 0, 15, 128, 0, 0, 0, 128, 2, 0, 85, 160, 1, 0, 228, 128,
- 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0,
- 0, 83, 72, 68, 82, 108, 2, 0, 0, 64, 0, 0, 0, 155, 0,
- 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 6,
- 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0,
- 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0,
- 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24,
- 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98,
- 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3,
- 194, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16,
- 0, 0, 0, 0, 0, 104, 0, 0, 2, 2, 0, 0, 0, 0, 0,
- 0, 9, 50, 0, 16, 0, 0, 0, 0, 0, 230, 26, 16, 0, 1,
- 0, 0, 0, 70, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 5, 0, 0, 0, 54, 0, 0, 6, 66, 0, 16, 0, 0, 0, 0,
- 0, 58, 128, 32, 0, 0, 0, 0, 0, 5, 0, 0, 0, 16, 0,
- 0, 8, 66, 0, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0,
- 0, 0, 0, 70, 130, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 15, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16,
- 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 50, 0,
- 0, 12, 18, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 58, 128, 32, 0,
- 0, 0, 0, 0, 5, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0,
- 0, 56, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 63, 14,
- 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0,
- 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 56, 0, 0,
- 8, 66, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 42, 128, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0, 29,
- 0, 0, 9, 66, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 42, 0, 16,
- 0, 0, 0, 0, 0, 54, 0, 0, 5, 34, 0, 16, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 0, 63, 69, 0, 0, 9, 242,
- 0, 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0,
- 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0,
- 0, 31, 0, 4, 3, 42, 0, 16, 0, 0, 0, 0, 0, 54, 0,
- 0, 8, 242, 32, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 62, 0, 0, 1, 21, 0, 0, 1, 56, 0, 0, 7, 114, 0, 16,
- 0, 1, 0, 0, 0, 246, 15, 16, 0, 1, 0, 0, 0, 70, 2,
- 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 0,
- 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0,
- 1, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 56, 0, 0,
- 7, 242, 32, 16, 0, 0, 0, 0, 0, 246, 15, 16, 0, 0, 0,
- 0, 0, 70, 14, 16, 0, 1, 0, 0, 0, 62, 0, 0, 1, 83,
- 84, 65, 84, 116, 0, 0, 0, 19, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 82, 68, 69, 70, 104, 2, 0, 0, 1, 0, 0, 0,
- 232, 0, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255,
- 255, 0, 1, 0, 0, 51, 2, 0, 0, 188, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 216, 0,
- 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255,
- 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0,
- 220, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0,
- 0, 255, 255, 255, 255, 1, 0, 0, 0, 1, 0, 0, 0, 12, 0,
- 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 115, 77, 105, 114, 114, 111, 114, 83, 97, 109, 112,
- 108, 101, 114, 0, 115, 77, 97, 115, 107, 83, 97, 109, 112, 108, 101,
- 114, 0, 116, 101, 120, 0, 109, 97, 115, 107, 0, 99, 98, 50, 0,
- 171, 171, 171, 225, 0, 0, 0, 7, 0, 0, 0, 0, 1, 0, 0,
- 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 1, 0,
- 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 192, 1,
- 0, 0, 0, 0, 0, 0, 208, 1, 0, 0, 48, 0, 0, 0, 8,
- 0, 0, 0, 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 0, 0,
- 236, 1, 0, 0, 64, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0,
- 0, 244, 1, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 80, 0,
- 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 220, 1, 0, 0, 0,
- 0, 0, 0, 12, 2, 0, 0, 88, 0, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0, 32, 2, 0,
- 0, 92, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 16, 2,
- 0, 0, 0, 0, 0, 0, 40, 2, 0, 0, 96, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 0, 0, 0,
- 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85, 115,
- 101, 114, 83, 112, 97, 99, 101, 0, 171, 3, 0, 3, 0, 3, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 109, 101, 110,
- 115, 105, 111, 110, 115, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 100, 105, 102, 102, 0, 171, 171,
- 171, 1, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 99, 101, 110, 116, 101, 114, 49, 0, 65, 0, 171, 171, 0,
- 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 114, 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100, 105,
- 117, 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40,
- 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32,
- 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54,
- 48, 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 171, 73, 83, 71,
- 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0,
- 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 1, 0, 0, 0, 12, 12, 0, 0, 83, 86, 95, 80, 111,
- 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68,
- 0, 171, 171, 171, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0,
- 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83,
- 86, 95, 84, 97, 114, 103, 101, 116, 0, 171, 171, 217, 183, 0, 0,
- 0, 0, 0, 0, 83, 97, 109, 112, 108, 101, 67, 111, 110, 105, 99,
- 71, 114, 97, 100, 105, 101, 110, 116, 0, 12, 7, 0, 0, 68, 88,
- 66, 67, 139, 251, 38, 36, 124, 246, 203, 168, 214, 67, 77, 25, 142,
- 114, 138, 15, 1, 0, 0, 0, 12, 7, 0, 0, 6, 0, 0, 0,
- 56, 0, 0, 0, 148, 1, 0, 0, 104, 3, 0, 0, 228, 3, 0,
- 0, 104, 6, 0, 0, 156, 6, 0, 0, 65, 111, 110, 57, 84, 1,
- 0, 0, 84, 1, 0, 0, 0, 2, 254, 255, 252, 0, 0, 0, 88,
- 0, 0, 0, 4, 0, 36, 0, 0, 0, 84, 0, 0, 0, 84, 0,
- 0, 0, 36, 0, 1, 0, 84, 0, 0, 0, 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 1,
- 0, 3, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 254, 255, 81, 0, 0, 5, 6, 0, 15, 160, 0, 0, 128,
- 63, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0,
- 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4, 0, 0, 4, 0,
- 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160, 2, 0, 228, 160,
- 4, 0, 0, 4, 0, 0, 3, 128, 0, 0, 228, 144, 1, 0, 238,
- 160, 1, 0, 228, 160, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0,
- 0, 128, 6, 0, 0, 160, 5, 0, 0, 3, 0, 0, 4, 128, 0,
- 0, 170, 128, 5, 0, 0, 160, 5, 0, 0, 3, 1, 0, 1, 128,
- 0, 0, 170, 128, 6, 0, 85, 160, 2, 0, 0, 3, 0, 0, 4,
- 128, 0, 0, 85, 129, 6, 0, 0, 160, 2, 0, 0, 3, 0, 0,
- 3, 192, 0, 0, 228, 128, 0, 0, 228, 160, 5, 0, 0, 3, 0,
- 0, 1, 128, 0, 0, 170, 128, 5, 0, 85, 160, 5, 0, 0, 3,
- 1, 0, 2, 128, 0, 0, 0, 128, 6, 0, 85, 160, 1, 0, 0,
- 2, 1, 0, 4, 128, 6, 0, 0, 160, 8, 0, 0, 3, 0, 0,
- 8, 224, 1, 0, 228, 128, 3, 0, 228, 160, 8, 0, 0, 3, 0,
- 0, 4, 224, 1, 0, 228, 128, 4, 0, 228, 160, 1, 0, 0, 2,
- 0, 0, 12, 192, 6, 0, 36, 160, 255, 255, 0, 0, 83, 72, 68,
- 82, 204, 1, 0, 0, 64, 0, 1, 0, 115, 0, 0, 0, 89, 0,
- 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 89,
- 0, 0, 4, 70, 142, 32, 0, 1, 0, 0, 0, 4, 0, 0, 0,
- 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0, 0,
- 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101, 0,
- 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 194,
- 32, 16, 0, 1, 0, 0, 0, 104, 0, 0, 2, 2, 0, 0, 0,
- 54, 0, 0, 8, 194, 32, 16, 0, 0, 0, 0, 0, 2, 64, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 63, 50, 0, 0, 11, 50, 0, 16, 0, 0, 0, 0, 0, 70,
- 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 54, 0, 0, 5, 50, 32, 16, 0, 0, 0, 0, 0, 70, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 7, 18, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0,
- 0, 0, 128, 63, 0, 0, 0, 8, 34, 0, 16, 0, 0, 0, 0,
- 0, 26, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 128, 63, 56, 0, 0, 8, 50, 0, 16, 0, 0,
- 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 70, 128, 32, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 56, 0, 0, 10, 50, 0, 16,
- 0, 1, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 2, 64,
- 0, 0, 0, 0, 0, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 0, 0, 0, 54, 0, 0, 5, 66, 0, 16, 0, 1, 0, 0, 0,
- 1, 64, 0, 0, 0, 0, 128, 63, 16, 0, 0, 8, 66, 32, 16,
- 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 70, 130,
- 32, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 130,
- 32, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0,
- 70, 130, 32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0,
- 11, 50, 32, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0,
- 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 70,
- 128, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 62, 0, 0, 1,
- 83, 84, 65, 84, 116, 0, 0, 0, 12, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 68, 69, 70, 124, 2, 0, 0, 2, 0, 0,
- 0, 100, 0, 0, 0, 2, 0, 0, 0, 28, 0, 0, 0, 0, 4,
- 254, 255, 0, 1, 0, 0, 72, 2, 0, 0, 92, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 99,
- 98, 48, 0, 99, 98, 51, 0, 92, 0, 0, 0, 4, 0, 0, 0,
- 148, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 96, 0, 0, 0, 6, 0, 0, 0, 52, 1, 0, 0, 80, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 16, 1, 0, 0, 16, 0, 0, 0, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 26, 1,
- 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 48, 0, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 81, 117, 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0,
- 3, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
- 101, 120, 67, 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101,
- 120, 67, 111, 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108,
- 111, 114, 0, 171, 171, 196, 1, 0, 0, 0, 0, 0, 0, 44, 0,
- 0, 0, 2, 0, 0, 0, 224, 1, 0, 0, 0, 0, 0, 0, 240,
- 1, 0, 0, 48, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 56, 0, 0,
- 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 23, 2, 0, 0, 64, 0, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 32, 2, 0, 0, 0, 0, 0, 0, 48, 2, 0, 0,
- 68, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 32, 2, 0,
- 0, 0, 0, 0, 0, 61, 2, 0, 0, 72, 0, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 0, 0, 0, 0, 68,
- 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84, 111, 85, 115, 101,
- 114, 83, 112, 97, 99, 101, 95, 99, 98, 51, 0, 171, 3, 0, 3,
- 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 105,
- 109, 101, 110, 115, 105, 111, 110, 115, 95, 99, 98, 51, 0, 171, 1,
- 0, 3, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 99, 101, 110, 116, 101, 114, 0, 97, 110, 103, 108, 101, 0, 171, 171,
- 171, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 115, 116, 97, 114, 116, 95, 111, 102, 102, 115, 101, 116, 0,
- 101, 110, 100, 95, 111, 102, 102, 115, 101, 116, 0, 77, 105, 99, 114,
- 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32,
- 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114,
- 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52,
- 0, 171, 171, 73, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0,
- 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79,
- 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83, 71, 78, 104,
- 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12, 0, 0, 92,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105,
- 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171,
- 171, 171, 193, 191, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 76, 12, 0, 0, 68, 88, 66, 67,
- 237, 135, 171, 29, 251, 164, 113, 72, 131, 168, 215, 155, 110, 76, 248,
- 73, 1, 0, 0, 0, 76, 12, 0, 0, 6, 0, 0, 0, 56, 0,
- 0, 0, 144, 3, 0, 0, 228, 8, 0, 0, 96, 9, 0, 0, 168,
- 11, 0, 0, 24, 12, 0, 0, 65, 111, 110, 57, 80, 3, 0, 0,
- 80, 3, 0, 0, 0, 2, 255, 255, 24, 3, 0, 0, 56, 0, 0,
- 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0, 56, 0, 2, 0,
- 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 2, 255, 255,
- 81, 0, 0, 5, 2, 0, 15, 160, 95, 174, 170, 60, 54, 90, 174,
- 189, 226, 118, 56, 62, 4, 29, 169, 190, 81, 0, 0, 5, 3, 0,
- 15, 160, 56, 247, 127, 63, 0, 0, 0, 0, 0, 0, 128, 63, 219,
- 15, 73, 64, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0, 0, 192,
- 219, 15, 201, 63, 216, 15, 201, 63, 134, 249, 34, 62, 81, 0, 0,
- 5, 5, 0, 15, 160, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 0, 0, 0, 128, 0,
- 0, 15, 176, 31, 0, 0, 2, 0, 0, 0, 144, 0, 8, 15, 160,
- 31, 0, 0, 2, 0, 0, 0, 144, 1, 8, 15, 160, 2, 0, 0,
- 3, 0, 0, 3, 128, 0, 0, 235, 176, 0, 0, 238, 161, 35, 0,
- 0, 2, 0, 0, 12, 128, 0, 0, 68, 128, 2, 0, 0, 3, 1,
- 0, 3, 128, 0, 0, 238, 129, 0, 0, 235, 128, 88, 0, 0, 4,
- 0, 0, 12, 128, 1, 0, 0, 128, 0, 0, 228, 128, 0, 0, 180,
- 128, 88, 0, 0, 4, 1, 0, 1, 128, 1, 0, 85, 128, 3, 0,
- 85, 160, 3, 0, 170, 160, 6, 0, 0, 2, 0, 0, 8, 128, 0,
- 0, 255, 128, 5, 0, 0, 3, 0, 0, 4, 128, 0, 0, 255, 128,
- 0, 0, 170, 128, 5, 0, 0, 3, 0, 0, 8, 128, 0, 0, 170,
- 128, 0, 0, 170, 128, 4, 0, 0, 4, 1, 0, 2, 128, 0, 0,
- 255, 128, 2, 0, 0, 160, 2, 0, 85, 160, 4, 0, 0, 4, 1,
- 0, 2, 128, 0, 0, 255, 128, 1, 0, 85, 128, 2, 0, 170, 160,
- 4, 0, 0, 4, 1, 0, 2, 128, 0, 0, 255, 128, 1, 0, 85,
- 128, 2, 0, 255, 160, 4, 0, 0, 4, 0, 0, 8, 128, 0, 0,
- 255, 128, 1, 0, 85, 128, 3, 0, 0, 160, 5, 0, 0, 3, 0,
- 0, 4, 128, 0, 0, 255, 128, 0, 0, 170, 128, 4, 0, 0, 4,
- 0, 0, 8, 128, 0, 0, 170, 128, 4, 0, 0, 160, 4, 0, 85,
- 160, 4, 0, 0, 4, 0, 0, 4, 128, 0, 0, 255, 128, 1, 0,
- 0, 128, 0, 0, 170, 128, 88, 0, 0, 4, 0, 0, 8, 128, 0,
- 0, 0, 128, 3, 0, 85, 161, 3, 0, 255, 161, 2, 0, 0, 3,
- 0, 0, 4, 128, 0, 0, 255, 128, 0, 0, 170, 128, 2, 0, 0,
- 3, 0, 0, 8, 128, 0, 0, 170, 128, 0, 0, 170, 128, 2, 0,
- 0, 3, 1, 0, 1, 128, 0, 0, 0, 129, 0, 0, 85, 128, 88,
- 0, 0, 4, 0, 0, 3, 128, 1, 0, 0, 128, 0, 0, 228, 128,
- 0, 0, 225, 128, 88, 0, 0, 4, 0, 0, 2, 128, 0, 0, 85,
- 128, 3, 0, 170, 160, 3, 0, 85, 160, 88, 0, 0, 4, 0, 0,
- 1, 128, 0, 0, 0, 128, 3, 0, 85, 160, 0, 0, 85, 128, 4,
- 0, 0, 4, 0, 0, 1, 128, 0, 0, 0, 128, 0, 0, 255, 129,
- 0, 0, 170, 128, 2, 0, 0, 3, 0, 0, 1, 128, 0, 0, 0,
- 128, 1, 0, 0, 161, 2, 0, 0, 3, 0, 0, 1, 128, 0, 0,
- 0, 128, 4, 0, 170, 160, 5, 0, 0, 3, 0, 0, 2, 128, 0,
- 0, 0, 128, 4, 0, 255, 160, 35, 0, 0, 2, 0, 0, 2, 128,
- 0, 0, 85, 128, 19, 0, 0, 2, 0, 0, 2, 128, 0, 0, 85,
- 128, 88, 0, 0, 4, 0, 0, 1, 128, 0, 0, 0, 128, 0, 0,
- 85, 128, 0, 0, 85, 129, 2, 0, 0, 3, 0, 0, 1, 128, 0,
- 0, 0, 128, 1, 0, 85, 161, 2, 0, 0, 3, 0, 0, 2, 128,
- 1, 0, 85, 161, 1, 0, 170, 160, 6, 0, 0, 2, 0, 0, 2,
- 128, 0, 0, 85, 128, 5, 0, 0, 3, 0, 0, 1, 128, 0, 0,
- 85, 128, 0, 0, 0, 128, 1, 0, 0, 2, 0, 0, 2, 128, 5,
- 0, 0, 160, 66, 0, 0, 3, 1, 0, 15, 128, 0, 0, 228, 176,
- 1, 8, 228, 160, 66, 0, 0, 3, 0, 0, 15, 128, 0, 0, 228,
- 128, 0, 8, 228, 160, 5, 0, 0, 3, 0, 0, 7, 128, 0, 0,
- 255, 128, 0, 0, 228, 128, 5, 0, 0, 3, 0, 0, 15, 128, 1,
- 0, 255, 128, 0, 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128,
- 0, 0, 228, 128, 255, 255, 0, 0, 83, 72, 68, 82, 76, 5, 0,
- 0, 64, 0, 0, 0, 83, 1, 0, 0, 89, 0, 0, 4, 70, 142,
- 32, 0, 0, 0, 0, 0, 5, 0, 0, 0, 90, 0, 0, 3, 0,
- 96, 16, 0, 0, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0,
- 1, 0, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0,
- 0, 85, 85, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0,
- 0, 0, 85, 85, 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1,
- 0, 0, 0, 98, 16, 0, 3, 194, 16, 16, 0, 1, 0, 0, 0,
- 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0, 0, 104, 0, 0,
- 2, 2, 0, 0, 0, 0, 0, 0, 9, 50, 0, 16, 0, 0, 0,
- 0, 0, 182, 31, 16, 0, 1, 0, 0, 0, 182, 143, 32, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 52, 0, 0, 9,
- 66, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 129, 0, 0,
- 0, 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0, 0, 0, 0,
- 0, 0, 14, 0, 0, 10, 66, 0, 16, 0, 0, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63,
- 0, 0, 128, 63, 42, 0, 16, 0, 0, 0, 0, 0, 51, 0, 0,
- 9, 130, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 129, 0,
- 0, 0, 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0, 0, 0,
- 0, 0, 0, 56, 0, 0, 7, 66, 0, 16, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0,
- 0, 56, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 42, 0,
- 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 50,
- 0, 0, 9, 18, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0,
- 0, 0, 0, 0, 1, 64, 0, 0, 95, 174, 170, 60, 1, 64, 0,
- 0, 54, 90, 174, 189, 50, 0, 0, 9, 18, 0, 16, 0, 1, 0,
- 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1,
- 0, 0, 0, 1, 64, 0, 0, 226, 118, 56, 62, 50, 0, 0, 9,
- 18, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 4, 29,
- 169, 190, 50, 0, 0, 9, 130, 0, 16, 0, 0, 0, 0, 0, 58,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0,
- 1, 64, 0, 0, 56, 247, 127, 63, 56, 0, 0, 7, 18, 0, 16,
- 0, 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 42, 0,
- 16, 0, 0, 0, 0, 0, 50, 0, 0, 9, 18, 0, 16, 0, 1,
- 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0,
- 0, 0, 0, 192, 1, 64, 0, 0, 219, 15, 201, 63, 49, 0, 0,
- 9, 34, 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 128, 129, 0,
- 0, 0, 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 7, 18, 0, 16, 0, 1, 0, 0, 0,
- 26, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0,
- 0, 50, 0, 0, 9, 66, 0, 16, 0, 0, 0, 0, 0, 42, 0,
- 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 0, 1, 0, 0, 0, 49, 0, 0, 8, 130, 0, 16, 0,
- 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16,
- 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 130, 0,
- 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 1,
- 64, 0, 0, 219, 15, 73, 192, 0, 0, 0, 7, 66, 0, 16, 0,
- 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16,
- 0, 0, 0, 0, 0, 51, 0, 0, 7, 130, 0, 16, 0, 0, 0,
- 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0,
- 0, 0, 0, 52, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0,
- 26, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0,
- 0, 29, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 0,
- 0, 0, 0, 49, 0, 0, 8, 34, 0, 16, 0, 0, 0, 0, 0,
- 58, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 7, 18, 0, 16, 0, 0, 0,
- 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0,
- 0, 0, 0, 55, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 0, 0,
- 0, 9, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0,
- 0, 0, 0, 10, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 216, 15,
- 201, 63, 56, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 134, 249, 34, 62,
- 29, 0, 0, 8, 34, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 0, 0,
- 0, 0, 26, 0, 0, 6, 18, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 10,
- 18, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 128, 65, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 26, 128, 32, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
- 10, 34, 0, 16, 0, 0, 0, 0, 0, 26, 128, 32, 128, 65, 0,
- 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 42, 128, 32, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 14, 0, 0, 7, 18, 0, 16, 0,
- 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16,
- 0, 0, 0, 0, 0, 54, 0, 0, 5, 34, 0, 16, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 0, 63, 69, 0, 0, 9, 242,
- 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0,
- 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0,
- 0, 56, 0, 0, 7, 114, 0, 16, 0, 0, 0, 0, 0, 246, 15,
- 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 69,
- 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0,
- 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0, 96, 16,
- 0, 1, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16, 0, 0, 0,
- 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 246, 15, 16, 0, 1,
- 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0,
- 39, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 30, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70,
- 64, 2, 0, 0, 1, 0, 0, 0, 224, 0, 0, 0, 5, 0, 0,
- 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0, 12, 2,
- 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 197, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 2, 0, 0, 0, 5,
- 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0,
- 1, 0, 0, 0, 12, 0, 0, 0, 214, 0, 0, 0, 2, 0, 0,
- 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 1, 0,
- 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 219, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 115, 83, 97,
- 109, 112, 108, 101, 114, 0, 115, 77, 97, 115, 107, 83, 97, 109, 112,
- 108, 101, 114, 0, 116, 101, 120, 0, 109, 97, 115, 107, 0, 99, 98,
- 51, 0, 171, 219, 0, 0, 0, 6, 0, 0, 0, 248, 0, 0, 0,
- 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 1, 0,
- 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 164, 1,
- 0, 0, 0, 0, 0, 0, 180, 1, 0, 0, 48, 0, 0, 0, 8,
- 0, 0, 0, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 0, 0,
- 212, 1, 0, 0, 56, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0,
- 0, 196, 1, 0, 0, 0, 0, 0, 0, 219, 1, 0, 0, 64, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 228, 1, 0, 0, 0,
- 0, 0, 0, 244, 1, 0, 0, 68, 0, 0, 0, 4, 0, 0, 0,
- 2, 0, 0, 0, 228, 1, 0, 0, 0, 0, 0, 0, 1, 2, 0,
- 0, 72, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 228, 1,
- 0, 0, 0, 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97,
- 99, 101, 84, 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 95, 99,
- 98, 51, 0, 171, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115,
- 95, 99, 98, 51, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 0, 97,
- 110, 103, 108, 101, 0, 171, 171, 171, 0, 0, 3, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 116, 97, 114, 116, 95,
- 111, 102, 102, 115, 101, 116, 0, 101, 110, 100, 95, 111, 102, 102, 115,
- 101, 116, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82,
- 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67,
- 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48,
- 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 104,
- 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 12, 12, 0, 0, 83, 86, 95, 80, 111, 115, 105,
- 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171,
- 171, 171, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8,
- 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95,
- 84, 97, 114, 103, 101, 116, 0, 171, 171, 229, 198, 0, 0, 0, 0,
- 0, 0, 12, 7, 0, 0, 68, 88, 66, 67, 139, 251, 38, 36, 124,
- 246, 203, 168, 214, 67, 77, 25, 142, 114, 138, 15, 1, 0, 0, 0,
- 12, 7, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 148, 1, 0,
- 0, 104, 3, 0, 0, 228, 3, 0, 0, 104, 6, 0, 0, 156, 6,
- 0, 0, 65, 111, 110, 57, 84, 1, 0, 0, 84, 1, 0, 0, 0,
- 2, 254, 255, 252, 0, 0, 0, 88, 0, 0, 0, 4, 0, 36, 0,
- 0, 0, 84, 0, 0, 0, 84, 0, 0, 0, 36, 0, 1, 0, 84,
- 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 1, 0, 5, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0,
- 5, 6, 0, 15, 160, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0,
- 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0,
- 0, 15, 144, 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144,
- 2, 0, 238, 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 3,
- 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0,
- 0, 3, 0, 0, 4, 128, 0, 0, 0, 128, 6, 0, 0, 160, 5,
- 0, 0, 3, 0, 0, 4, 128, 0, 0, 170, 128, 5, 0, 0, 160,
- 5, 0, 0, 3, 1, 0, 1, 128, 0, 0, 170, 128, 6, 0, 85,
- 160, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 85, 129, 6, 0,
- 0, 160, 2, 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0,
- 0, 228, 160, 5, 0, 0, 3, 0, 0, 1, 128, 0, 0, 170, 128,
- 5, 0, 85, 160, 5, 0, 0, 3, 1, 0, 2, 128, 0, 0, 0,
- 128, 6, 0, 85, 160, 1, 0, 0, 2, 1, 0, 4, 128, 6, 0,
- 0, 160, 8, 0, 0, 3, 0, 0, 8, 224, 1, 0, 228, 128, 3,
- 0, 228, 160, 8, 0, 0, 3, 0, 0, 4, 224, 1, 0, 228, 128,
- 4, 0, 228, 160, 1, 0, 0, 2, 0, 0, 12, 192, 6, 0, 36,
- 160, 255, 255, 0, 0, 83, 72, 68, 82, 204, 1, 0, 0, 64, 0,
- 1, 0, 115, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0,
- 1, 0, 0, 0, 4, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16,
- 0, 0, 0, 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1,
- 0, 0, 0, 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0,
- 104, 0, 0, 2, 2, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16,
- 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50,
- 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0,
- 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 50, 32,
- 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0,
- 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 0, 0, 0,
- 8, 34, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0,
- 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 56,
- 0, 0, 8, 50, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0,
- 0, 0, 0, 0, 70, 128, 32, 0, 1, 0, 0, 0, 3, 0, 0,
- 0, 56, 0, 0, 10, 50, 0, 16, 0, 1, 0, 0, 0, 70, 0,
- 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 63, 0,
- 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5,
- 66, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128,
- 63, 16, 0, 0, 8, 66, 32, 16, 0, 1, 0, 0, 0, 70, 2,
- 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 16, 0, 0, 8, 130, 32, 16, 0, 1, 0, 0, 0,
- 70, 2, 16, 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0, 1, 0,
- 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0,
- 0, 12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0,
- 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69,
- 70, 124, 2, 0, 0, 2, 0, 0, 0, 100, 0, 0, 0, 2, 0,
- 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0, 0, 72,
- 2, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 99, 98, 51, 0,
- 92, 0, 0, 0, 4, 0, 0, 0, 148, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 6, 0,
- 0, 0, 52, 1, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0,
- 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 16, 1, 0,
- 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 32, 0, 0, 0, 16,
- 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 40, 1, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101,
- 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100,
- 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115,
- 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 171, 171, 196, 1,
- 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 2, 0, 0, 0, 224,
- 1, 0, 0, 0, 0, 0, 0, 240, 1, 0, 0, 48, 0, 0, 0,
- 8, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 16, 2, 0, 0, 56, 0, 0, 0, 8, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 23, 2, 0, 0, 64,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0,
- 0, 0, 0, 0, 48, 2, 0, 0, 68, 0, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 32, 2, 0, 0, 0, 0, 0, 0, 61, 2,
- 0, 0, 72, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 32,
- 2, 0, 0, 0, 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112,
- 97, 99, 101, 84, 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 95,
- 99, 98, 51, 0, 171, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 100, 105, 109, 101, 110, 115, 105, 111, 110,
- 115, 95, 99, 98, 51, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 0,
- 97, 110, 103, 108, 101, 0, 171, 171, 171, 0, 0, 3, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 116, 97, 114, 116,
- 95, 111, 102, 102, 115, 101, 116, 0, 101, 110, 100, 95, 111, 102, 102,
- 115, 101, 116, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40,
- 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32,
- 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54,
- 48, 48, 46, 49, 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78,
- 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 7, 3, 0, 0, 80, 79, 83, 73, 84, 73, 79, 78, 0,
- 171, 171, 171, 79, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0,
- 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
- 0, 0, 0, 3, 12, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0,
- 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69,
- 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 61, 211, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 80, 12, 0, 0, 68, 88, 66, 67, 247, 165, 11, 199, 50, 224, 108,
- 119, 183, 179, 87, 201, 53, 213, 28, 250, 1, 0, 0, 0, 80, 12,
- 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 144, 3, 0, 0, 228,
- 8, 0, 0, 96, 9, 0, 0, 172, 11, 0, 0, 28, 12, 0, 0,
- 65, 111, 110, 57, 80, 3, 0, 0, 80, 3, 0, 0, 0, 2, 255,
- 255, 24, 3, 0, 0, 56, 0, 0, 0, 1, 0, 44, 0, 0, 0,
- 56, 0, 0, 0, 56, 0, 2, 0, 36, 0, 0, 0, 56, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0, 3, 0, 2, 0, 0, 0,
- 0, 0, 0, 0, 1, 2, 255, 255, 81, 0, 0, 5, 2, 0, 15,
- 160, 95, 174, 170, 60, 54, 90, 174, 189, 226, 118, 56, 62, 4, 29,
- 169, 190, 81, 0, 0, 5, 3, 0, 15, 160, 56, 247, 127, 63, 0,
- 0, 0, 0, 0, 0, 128, 63, 219, 15, 73, 64, 81, 0, 0, 5,
- 4, 0, 15, 160, 0, 0, 0, 192, 219, 15, 201, 63, 216, 15, 201,
- 63, 134, 249, 34, 62, 81, 0, 0, 5, 5, 0, 15, 160, 0, 0,
- 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2,
- 0, 0, 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0,
- 144, 1, 8, 15, 160, 2, 0, 0, 3, 0, 0, 3, 128, 0, 0,
- 235, 176, 0, 0, 238, 161, 35, 0, 0, 2, 0, 0, 12, 128, 0,
- 0, 68, 128, 2, 0, 0, 3, 1, 0, 3, 128, 0, 0, 238, 129,
- 0, 0, 235, 128, 88, 0, 0, 4, 0, 0, 12, 128, 1, 0, 0,
- 128, 0, 0, 228, 128, 0, 0, 180, 128, 88, 0, 0, 4, 1, 0,
- 1, 128, 1, 0, 85, 128, 3, 0, 85, 160, 3, 0, 170, 160, 6,
- 0, 0, 2, 0, 0, 8, 128, 0, 0, 255, 128, 5, 0, 0, 3,
- 0, 0, 4, 128, 0, 0, 255, 128, 0, 0, 170, 128, 5, 0, 0,
- 3, 0, 0, 8, 128, 0, 0, 170, 128, 0, 0, 170, 128, 4, 0,
- 0, 4, 1, 0, 2, 128, 0, 0, 255, 128, 2, 0, 0, 160, 2,
- 0, 85, 160, 4, 0, 0, 4, 1, 0, 2, 128, 0, 0, 255, 128,
- 1, 0, 85, 128, 2, 0, 170, 160, 4, 0, 0, 4, 1, 0, 2,
- 128, 0, 0, 255, 128, 1, 0, 85, 128, 2, 0, 255, 160, 4, 0,
- 0, 4, 0, 0, 8, 128, 0, 0, 255, 128, 1, 0, 85, 128, 3,
- 0, 0, 160, 5, 0, 0, 3, 0, 0, 4, 128, 0, 0, 255, 128,
- 0, 0, 170, 128, 4, 0, 0, 4, 0, 0, 8, 128, 0, 0, 170,
- 128, 4, 0, 0, 160, 4, 0, 85, 160, 4, 0, 0, 4, 0, 0,
- 4, 128, 0, 0, 255, 128, 1, 0, 0, 128, 0, 0, 170, 128, 88,
- 0, 0, 4, 0, 0, 8, 128, 0, 0, 0, 128, 3, 0, 85, 161,
- 3, 0, 255, 161, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 255,
- 128, 0, 0, 170, 128, 2, 0, 0, 3, 0, 0, 8, 128, 0, 0,
- 170, 128, 0, 0, 170, 128, 2, 0, 0, 3, 1, 0, 1, 128, 0,
- 0, 0, 129, 0, 0, 85, 128, 88, 0, 0, 4, 0, 0, 3, 128,
- 1, 0, 0, 128, 0, 0, 228, 128, 0, 0, 225, 128, 88, 0, 0,
- 4, 0, 0, 2, 128, 0, 0, 85, 128, 3, 0, 170, 160, 3, 0,
- 85, 160, 88, 0, 0, 4, 0, 0, 1, 128, 0, 0, 0, 128, 3,
- 0, 85, 160, 0, 0, 85, 128, 4, 0, 0, 4, 0, 0, 1, 128,
- 0, 0, 0, 128, 0, 0, 255, 129, 0, 0, 170, 128, 2, 0, 0,
- 3, 0, 0, 1, 128, 0, 0, 0, 128, 1, 0, 0, 161, 2, 0,
- 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 4, 0, 170, 160, 5,
- 0, 0, 3, 0, 0, 2, 128, 0, 0, 0, 128, 4, 0, 255, 160,
- 35, 0, 0, 2, 0, 0, 2, 128, 0, 0, 85, 128, 19, 0, 0,
- 2, 0, 0, 2, 128, 0, 0, 85, 128, 88, 0, 0, 4, 0, 0,
- 1, 128, 0, 0, 0, 128, 0, 0, 85, 128, 0, 0, 85, 129, 2,
- 0, 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 1, 0, 85, 161,
- 2, 0, 0, 3, 0, 0, 2, 128, 1, 0, 85, 161, 1, 0, 170,
- 160, 6, 0, 0, 2, 0, 0, 2, 128, 0, 0, 85, 128, 5, 0,
- 0, 3, 0, 0, 1, 128, 0, 0, 85, 128, 0, 0, 0, 128, 1,
- 0, 0, 2, 0, 0, 2, 128, 5, 0, 0, 160, 66, 0, 0, 3,
- 1, 0, 15, 128, 0, 0, 228, 176, 1, 8, 228, 160, 66, 0, 0,
- 3, 0, 0, 15, 128, 0, 0, 228, 128, 0, 8, 228, 160, 5, 0,
- 0, 3, 0, 0, 7, 128, 0, 0, 255, 128, 0, 0, 228, 128, 5,
- 0, 0, 3, 0, 0, 15, 128, 1, 0, 255, 128, 0, 0, 228, 128,
- 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0,
- 0, 83, 72, 68, 82, 76, 5, 0, 0, 64, 0, 0, 0, 83, 1,
- 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0,
- 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0,
- 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24,
- 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98,
- 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3,
- 194, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16,
- 0, 0, 0, 0, 0, 104, 0, 0, 2, 2, 0, 0, 0, 0, 0,
- 0, 9, 50, 0, 16, 0, 0, 0, 0, 0, 182, 31, 16, 0, 1,
- 0, 0, 0, 182, 143, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 52, 0, 0, 9, 66, 0, 16, 0, 0, 0, 0,
- 0, 26, 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 10, 0,
- 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 10, 66,
- 0, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63,
- 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 42, 0, 16,
- 0, 0, 0, 0, 0, 51, 0, 0, 9, 130, 0, 16, 0, 0, 0,
- 0, 0, 26, 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 10,
- 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 7,
- 66, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0,
- 0, 58, 0, 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 130, 0,
- 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 42,
- 0, 16, 0, 0, 0, 0, 0, 50, 0, 0, 9, 18, 0, 16, 0,
- 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0,
- 0, 95, 174, 170, 60, 1, 64, 0, 0, 54, 90, 174, 189, 50, 0,
- 0, 9, 18, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0,
- 226, 118, 56, 62, 50, 0, 0, 9, 18, 0, 16, 0, 1, 0, 0,
- 0, 58, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1, 0,
- 0, 0, 1, 64, 0, 0, 4, 29, 169, 190, 50, 0, 0, 9, 130,
- 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 56, 247, 127,
- 63, 56, 0, 0, 7, 18, 0, 16, 0, 1, 0, 0, 0, 58, 0,
- 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 50,
- 0, 0, 9, 18, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0,
- 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 192, 1, 64, 0,
- 0, 219, 15, 201, 63, 49, 0, 0, 9, 34, 0, 16, 0, 1, 0,
- 0, 0, 26, 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 10,
- 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7,
- 18, 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 0, 1, 0, 0,
- 0, 10, 0, 16, 0, 1, 0, 0, 0, 50, 0, 0, 9, 66, 0,
- 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 58,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0,
- 49, 0, 0, 8, 130, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16,
- 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 58,
- 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 219, 15, 73, 192,
- 0, 0, 0, 7, 66, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16,
- 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 51, 0,
- 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 52, 0, 0, 7,
- 18, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 29, 0, 0, 8, 18, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 8,
- 34, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0,
- 0, 58, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0,
- 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 55, 0, 0, 10,
- 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0,
- 0, 42, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 42, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 128, 32, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
- 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 216, 15, 201, 63, 56, 0, 0, 7, 18,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0,
- 1, 64, 0, 0, 134, 249, 34, 62, 29, 0, 0, 8, 34, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 0,
- 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 6, 18,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0, 0,
- 0, 0, 0, 0, 55, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0,
- 0, 26, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0,
- 0, 0, 0, 0, 26, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 10, 34, 0, 16, 0, 0, 0,
- 0, 0, 26, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 42, 128, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 14, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 54, 0,
- 0, 5, 34, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0,
- 0, 0, 63, 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0, 0,
- 70, 0, 16, 0, 0, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0,
- 0, 0, 96, 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 114, 0,
- 16, 0, 0, 0, 0, 0, 246, 15, 16, 0, 0, 0, 0, 0, 70,
- 2, 16, 0, 0, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0,
- 1, 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16,
- 0, 1, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 56, 0,
- 0, 7, 242, 32, 16, 0, 0, 0, 0, 0, 70, 14, 16, 0, 0,
- 0, 0, 0, 246, 15, 16, 0, 1, 0, 0, 0, 62, 0, 0, 1,
- 83, 84, 65, 84, 116, 0, 0, 0, 39, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 30, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 68, 69, 70, 68, 2, 0, 0, 1, 0, 0,
- 0, 228, 0, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 4,
- 255, 255, 0, 1, 0, 0, 16, 2, 0, 0, 188, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 214,
- 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0,
- 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0,
- 0, 218, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0,
- 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 1, 0, 0, 0, 12,
- 0, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 115, 87, 114, 97, 112, 83, 97, 109, 112, 108,
- 101, 114, 0, 115, 77, 97, 115, 107, 83, 97, 109, 112, 108, 101, 114,
- 0, 116, 101, 120, 0, 109, 97, 115, 107, 0, 99, 98, 51, 0, 171,
- 223, 0, 0, 0, 6, 0, 0, 0, 252, 0, 0, 0, 80, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0,
- 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 168, 1, 0, 0, 0,
- 0, 0, 0, 184, 1, 0, 0, 48, 0, 0, 0, 8, 0, 0, 0,
- 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 0, 0, 216, 1, 0,
- 0, 56, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 200, 1,
- 0, 0, 0, 0, 0, 0, 223, 1, 0, 0, 64, 0, 0, 0, 4,
- 0, 0, 0, 2, 0, 0, 0, 232, 1, 0, 0, 0, 0, 0, 0,
- 248, 1, 0, 0, 68, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0,
- 0, 232, 1, 0, 0, 0, 0, 0, 0, 5, 2, 0, 0, 72, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 232, 1, 0, 0, 0,
- 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101, 84,
- 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 95, 99, 98, 51, 0,
- 171, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 95, 99, 98,
- 51, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 0, 97, 110, 103, 108,
- 101, 0, 171, 171, 171, 0, 0, 3, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 115, 116, 97, 114, 116, 95, 111, 102, 102,
- 115, 101, 116, 0, 101, 110, 100, 95, 111, 102, 102, 115, 101, 116, 0,
- 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72,
- 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112,
- 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49,
- 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 104, 0, 0, 0,
- 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0,
- 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
- 0, 12, 12, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111,
- 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79,
- 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114,
- 103, 101, 116, 0, 171, 171, 97, 218, 0, 0, 0, 0, 0, 0, 12,
- 7, 0, 0, 68, 88, 66, 67, 139, 251, 38, 36, 124, 246, 203, 168,
- 214, 67, 77, 25, 142, 114, 138, 15, 1, 0, 0, 0, 12, 7, 0,
- 0, 6, 0, 0, 0, 56, 0, 0, 0, 148, 1, 0, 0, 104, 3,
- 0, 0, 228, 3, 0, 0, 104, 6, 0, 0, 156, 6, 0, 0, 65,
- 111, 110, 57, 84, 1, 0, 0, 84, 1, 0, 0, 0, 2, 254, 255,
- 252, 0, 0, 0, 88, 0, 0, 0, 4, 0, 36, 0, 0, 0, 84,
- 0, 0, 0, 84, 0, 0, 0, 36, 0, 1, 0, 84, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1,
- 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 0,
- 0, 0, 0, 0, 1, 0, 3, 0, 1, 0, 5, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0, 5, 6, 0,
- 15, 160, 0, 0, 128, 63, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144,
- 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238,
- 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 3, 128, 0, 0,
- 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0, 0, 3, 0,
- 0, 4, 128, 0, 0, 0, 128, 6, 0, 0, 160, 5, 0, 0, 3,
- 0, 0, 4, 128, 0, 0, 170, 128, 5, 0, 0, 160, 5, 0, 0,
- 3, 1, 0, 1, 128, 0, 0, 170, 128, 6, 0, 85, 160, 2, 0,
- 0, 3, 0, 0, 4, 128, 0, 0, 85, 129, 6, 0, 0, 160, 2,
- 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160,
- 5, 0, 0, 3, 0, 0, 1, 128, 0, 0, 170, 128, 5, 0, 85,
- 160, 5, 0, 0, 3, 1, 0, 2, 128, 0, 0, 0, 128, 6, 0,
- 85, 160, 1, 0, 0, 2, 1, 0, 4, 128, 6, 0, 0, 160, 8,
- 0, 0, 3, 0, 0, 8, 224, 1, 0, 228, 128, 3, 0, 228, 160,
- 8, 0, 0, 3, 0, 0, 4, 224, 1, 0, 228, 128, 4, 0, 228,
- 160, 1, 0, 0, 2, 0, 0, 12, 192, 6, 0, 36, 160, 255, 255,
- 0, 0, 83, 72, 68, 82, 204, 1, 0, 0, 64, 0, 1, 0, 115,
- 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 1, 0, 0,
- 0, 4, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0,
- 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0,
- 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0, 104, 0, 0,
- 2, 2, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50, 0, 16, 0,
- 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 50, 32, 16, 0, 0,
- 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0,
- 0, 1, 64, 0, 0, 0, 0, 128, 63, 0, 0, 0, 8, 34, 0,
- 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0,
- 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 56, 0, 0, 8,
- 50, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0,
- 0, 70, 128, 32, 0, 1, 0, 0, 0, 3, 0, 0, 0, 56, 0,
- 0, 10, 50, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 0,
- 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 63, 0, 0, 0, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 66, 0, 16,
- 0, 1, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 16, 0,
- 0, 8, 66, 32, 16, 0, 1, 0, 0, 0, 70, 2, 16, 0, 1,
- 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 8, 130, 32, 16, 0, 1, 0, 0, 0, 70, 2, 16,
- 0, 1, 0, 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 50, 0, 0, 11, 50, 32, 16, 0, 1, 0, 0, 0, 70,
- 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 12, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 124, 2,
- 0, 0, 2, 0, 0, 0, 100, 0, 0, 0, 2, 0, 0, 0, 28,
- 0, 0, 0, 0, 4, 254, 255, 0, 1, 0, 0, 72, 2, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 99, 98, 48, 0, 99, 98, 51, 0, 92, 0, 0,
- 0, 4, 0, 0, 0, 148, 0, 0, 0, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 6, 0, 0, 0, 52,
- 1, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 244, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 16, 1, 0, 0, 16, 0,
- 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 26, 1, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0,
- 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 40, 1, 0,
- 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101, 115, 99, 0,
- 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 77,
- 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 84, 101,
- 120, 116, 67, 111, 108, 111, 114, 0, 171, 171, 196, 1, 0, 0, 0,
- 0, 0, 0, 44, 0, 0, 0, 2, 0, 0, 0, 224, 1, 0, 0,
- 0, 0, 0, 0, 240, 1, 0, 0, 48, 0, 0, 0, 8, 0, 0,
- 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 16, 2,
- 0, 0, 56, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 23, 2, 0, 0, 64, 0, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 0, 0, 0,
- 0, 48, 2, 0, 0, 68, 0, 0, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 32, 2, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0, 72,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0,
- 0, 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101,
- 84, 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 95, 99, 98, 51,
- 0, 171, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 95, 99,
- 98, 51, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 0, 97, 110, 103,
- 108, 101, 0, 171, 171, 171, 0, 0, 3, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 115, 116, 97, 114, 116, 95, 111, 102,
- 102, 115, 101, 116, 0, 101, 110, 100, 95, 111, 102, 102, 115, 101, 116,
- 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32,
- 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109,
- 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46,
- 49, 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 44, 0, 0,
- 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7,
- 3, 0, 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171,
- 79, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0,
- 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 3, 12, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86,
- 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79,
- 79, 82, 68, 0, 171, 171, 171, 189, 230, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 84, 12, 0,
- 0, 68, 88, 66, 67, 176, 243, 97, 211, 20, 121, 26, 93, 252, 11,
- 132, 198, 181, 186, 97, 15, 1, 0, 0, 0, 84, 12, 0, 0, 6,
- 0, 0, 0, 56, 0, 0, 0, 144, 3, 0, 0, 228, 8, 0, 0,
- 96, 9, 0, 0, 176, 11, 0, 0, 32, 12, 0, 0, 65, 111, 110,
- 57, 80, 3, 0, 0, 80, 3, 0, 0, 0, 2, 255, 255, 24, 3,
- 0, 0, 56, 0, 0, 0, 1, 0, 44, 0, 0, 0, 56, 0, 0,
- 0, 56, 0, 2, 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 255, 255, 81, 0, 0, 5, 2, 0, 15, 160, 95, 174,
- 170, 60, 54, 90, 174, 189, 226, 118, 56, 62, 4, 29, 169, 190, 81,
- 0, 0, 5, 3, 0, 15, 160, 56, 247, 127, 63, 0, 0, 0, 0,
- 0, 0, 128, 63, 219, 15, 73, 64, 81, 0, 0, 5, 4, 0, 15,
- 160, 0, 0, 0, 192, 219, 15, 201, 63, 216, 15, 201, 63, 134, 249,
- 34, 62, 81, 0, 0, 5, 5, 0, 15, 160, 0, 0, 0, 63, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2,
- 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0,
- 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1, 8,
- 15, 160, 2, 0, 0, 3, 0, 0, 3, 128, 0, 0, 235, 176, 0,
- 0, 238, 161, 35, 0, 0, 2, 0, 0, 12, 128, 0, 0, 68, 128,
- 2, 0, 0, 3, 1, 0, 3, 128, 0, 0, 238, 129, 0, 0, 235,
- 128, 88, 0, 0, 4, 0, 0, 12, 128, 1, 0, 0, 128, 0, 0,
- 228, 128, 0, 0, 180, 128, 88, 0, 0, 4, 1, 0, 1, 128, 1,
- 0, 85, 128, 3, 0, 85, 160, 3, 0, 170, 160, 6, 0, 0, 2,
- 0, 0, 8, 128, 0, 0, 255, 128, 5, 0, 0, 3, 0, 0, 4,
- 128, 0, 0, 255, 128, 0, 0, 170, 128, 5, 0, 0, 3, 0, 0,
- 8, 128, 0, 0, 170, 128, 0, 0, 170, 128, 4, 0, 0, 4, 1,
- 0, 2, 128, 0, 0, 255, 128, 2, 0, 0, 160, 2, 0, 85, 160,
- 4, 0, 0, 4, 1, 0, 2, 128, 0, 0, 255, 128, 1, 0, 85,
- 128, 2, 0, 170, 160, 4, 0, 0, 4, 1, 0, 2, 128, 0, 0,
- 255, 128, 1, 0, 85, 128, 2, 0, 255, 160, 4, 0, 0, 4, 0,
- 0, 8, 128, 0, 0, 255, 128, 1, 0, 85, 128, 3, 0, 0, 160,
- 5, 0, 0, 3, 0, 0, 4, 128, 0, 0, 255, 128, 0, 0, 170,
- 128, 4, 0, 0, 4, 0, 0, 8, 128, 0, 0, 170, 128, 4, 0,
- 0, 160, 4, 0, 85, 160, 4, 0, 0, 4, 0, 0, 4, 128, 0,
- 0, 255, 128, 1, 0, 0, 128, 0, 0, 170, 128, 88, 0, 0, 4,
- 0, 0, 8, 128, 0, 0, 0, 128, 3, 0, 85, 161, 3, 0, 255,
- 161, 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 255, 128, 0, 0,
- 170, 128, 2, 0, 0, 3, 0, 0, 8, 128, 0, 0, 170, 128, 0,
- 0, 170, 128, 2, 0, 0, 3, 1, 0, 1, 128, 0, 0, 0, 129,
- 0, 0, 85, 128, 88, 0, 0, 4, 0, 0, 3, 128, 1, 0, 0,
- 128, 0, 0, 228, 128, 0, 0, 225, 128, 88, 0, 0, 4, 0, 0,
- 2, 128, 0, 0, 85, 128, 3, 0, 170, 160, 3, 0, 85, 160, 88,
- 0, 0, 4, 0, 0, 1, 128, 0, 0, 0, 128, 3, 0, 85, 160,
- 0, 0, 85, 128, 4, 0, 0, 4, 0, 0, 1, 128, 0, 0, 0,
- 128, 0, 0, 255, 129, 0, 0, 170, 128, 2, 0, 0, 3, 0, 0,
- 1, 128, 0, 0, 0, 128, 1, 0, 0, 161, 2, 0, 0, 3, 0,
- 0, 1, 128, 0, 0, 0, 128, 4, 0, 170, 160, 5, 0, 0, 3,
- 0, 0, 2, 128, 0, 0, 0, 128, 4, 0, 255, 160, 35, 0, 0,
- 2, 0, 0, 2, 128, 0, 0, 85, 128, 19, 0, 0, 2, 0, 0,
- 2, 128, 0, 0, 85, 128, 88, 0, 0, 4, 0, 0, 1, 128, 0,
- 0, 0, 128, 0, 0, 85, 128, 0, 0, 85, 129, 2, 0, 0, 3,
- 0, 0, 1, 128, 0, 0, 0, 128, 1, 0, 85, 161, 2, 0, 0,
- 3, 0, 0, 2, 128, 1, 0, 85, 161, 1, 0, 170, 160, 6, 0,
- 0, 2, 0, 0, 2, 128, 0, 0, 85, 128, 5, 0, 0, 3, 0,
- 0, 1, 128, 0, 0, 85, 128, 0, 0, 0, 128, 1, 0, 0, 2,
- 0, 0, 2, 128, 5, 0, 0, 160, 66, 0, 0, 3, 1, 0, 15,
- 128, 0, 0, 228, 176, 1, 8, 228, 160, 66, 0, 0, 3, 0, 0,
- 15, 128, 0, 0, 228, 128, 0, 8, 228, 160, 5, 0, 0, 3, 0,
- 0, 7, 128, 0, 0, 255, 128, 0, 0, 228, 128, 5, 0, 0, 3,
- 0, 0, 15, 128, 1, 0, 255, 128, 0, 0, 228, 128, 1, 0, 0,
- 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0, 83, 72,
- 68, 82, 76, 5, 0, 0, 64, 0, 0, 0, 83, 1, 0, 0, 89,
- 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 5, 0, 0, 0,
- 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 90, 0, 0,
- 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0, 4, 0, 112,
- 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24, 0, 4, 0,
- 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0, 3,
- 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3, 194, 16, 16,
- 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 0, 0,
- 0, 0, 104, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 9, 50,
- 0, 16, 0, 0, 0, 0, 0, 182, 31, 16, 0, 1, 0, 0, 0,
- 182, 143, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 52, 0, 0, 9, 66, 0, 16, 0, 0, 0, 0, 0, 26, 0,
- 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 128, 129,
- 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 10, 66, 0, 16, 0,
- 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63, 0, 0, 128,
- 63, 0, 0, 128, 63, 0, 0, 128, 63, 42, 0, 16, 0, 0, 0,
- 0, 0, 51, 0, 0, 9, 130, 0, 16, 0, 0, 0, 0, 0, 26,
- 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 128,
- 129, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 7, 66, 0, 16,
- 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 58, 0,
- 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 130, 0, 16, 0, 0,
- 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 0,
- 0, 0, 0, 0, 50, 0, 0, 9, 18, 0, 16, 0, 1, 0, 0,
- 0, 58, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 95, 174,
- 170, 60, 1, 64, 0, 0, 54, 90, 174, 189, 50, 0, 0, 9, 18,
- 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0, 226, 118, 56,
- 62, 50, 0, 0, 9, 18, 0, 16, 0, 1, 0, 0, 0, 58, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1,
- 64, 0, 0, 4, 29, 169, 190, 50, 0, 0, 9, 130, 0, 16, 0,
- 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 1, 0, 0, 0, 1, 64, 0, 0, 56, 247, 127, 63, 56, 0,
- 0, 7, 18, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0,
- 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 50, 0, 0, 9,
- 18, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0,
- 0, 1, 64, 0, 0, 0, 0, 0, 192, 1, 64, 0, 0, 219, 15,
- 201, 63, 49, 0, 0, 9, 34, 0, 16, 0, 1, 0, 0, 0, 26,
- 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 128,
- 129, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 18, 0, 16,
- 0, 1, 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 10, 0,
- 16, 0, 1, 0, 0, 0, 50, 0, 0, 9, 66, 0, 16, 0, 0,
- 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0,
- 0, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 49, 0, 0,
- 8, 130, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0,
- 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0,
- 0, 0, 0, 0, 1, 64, 0, 0, 219, 15, 73, 192, 0, 0, 0,
- 7, 66, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0,
- 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 51, 0, 0, 7, 130,
- 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 52, 0, 0, 7, 18, 0, 16,
- 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 29, 0, 0, 8, 18, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 8, 34, 0, 16,
- 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 58, 0,
- 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 18,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0,
- 26, 0, 16, 0, 0, 0, 0, 0, 55, 0, 0, 10, 18, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 42, 0,
- 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 9, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 10, 128, 32, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 7, 18, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1,
- 64, 0, 0, 216, 15, 201, 63, 56, 0, 0, 7, 18, 0, 16, 0,
- 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0,
- 0, 134, 249, 34, 62, 29, 0, 0, 8, 34, 0, 16, 0, 0, 0,
- 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 6, 18, 0, 16, 0,
- 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0, 0, 0, 0, 0,
- 0, 55, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0, 0, 26, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
- 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0,
- 0, 26, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 10, 34, 0, 16, 0, 0, 0, 0, 0, 26,
- 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 42, 128, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0, 14, 0, 0,
- 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 54, 0, 0, 5, 34,
- 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 63,
- 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16,
- 0, 0, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96,
- 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 114, 0, 16, 0, 0,
- 0, 0, 0, 246, 15, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0,
- 0, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0,
- 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0,
- 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 242,
- 32, 16, 0, 0, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0,
- 246, 15, 16, 0, 1, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65,
- 84, 116, 0, 0, 0, 39, 0, 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 82, 68, 69, 70, 72, 2, 0, 0, 1, 0, 0, 0, 232, 0,
- 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0,
- 1, 0, 0, 20, 2, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0,
- 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255,
- 255, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 220, 0,
- 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255,
- 255, 255, 255, 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0,
- 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 115, 77, 105, 114, 114, 111, 114, 83, 97, 109, 112, 108, 101,
- 114, 0, 115, 77, 97, 115, 107, 83, 97, 109, 112, 108, 101, 114, 0,
- 116, 101, 120, 0, 109, 97, 115, 107, 0, 99, 98, 51, 0, 171, 171,
- 171, 225, 0, 0, 0, 6, 0, 0, 0, 0, 1, 0, 0, 80, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 1, 0, 0, 0,
- 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 172, 1, 0, 0,
- 0, 0, 0, 0, 188, 1, 0, 0, 48, 0, 0, 0, 8, 0, 0,
- 0, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 0, 0, 220, 1,
- 0, 0, 56, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 204,
- 1, 0, 0, 0, 0, 0, 0, 227, 1, 0, 0, 64, 0, 0, 0,
- 4, 0, 0, 0, 2, 0, 0, 0, 236, 1, 0, 0, 0, 0, 0,
- 0, 252, 1, 0, 0, 68, 0, 0, 0, 4, 0, 0, 0, 2, 0,
- 0, 0, 236, 1, 0, 0, 0, 0, 0, 0, 9, 2, 0, 0, 72,
- 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 236, 1, 0, 0,
- 0, 0, 0, 0, 68, 101, 118, 105, 99, 101, 83, 112, 97, 99, 101,
- 84, 111, 85, 115, 101, 114, 83, 112, 97, 99, 101, 95, 99, 98, 51,
- 0, 171, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 100, 105, 109, 101, 110, 115, 105, 111, 110, 115, 95, 99,
- 98, 51, 0, 171, 1, 0, 3, 0, 1, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 0, 97, 110, 103,
- 108, 101, 0, 171, 171, 171, 0, 0, 3, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 115, 116, 97, 114, 116, 95, 111, 102,
- 102, 115, 101, 116, 0, 101, 110, 100, 95, 111, 102, 102, 115, 101, 116,
- 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32,
- 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109,
- 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46,
- 49, 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 104, 0, 0,
- 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15,
- 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0,
- 0, 0, 12, 12, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105,
- 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171,
- 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97,
- 114, 103, 101, 116, 0, 171, 171, 225, 237, 0, 0, 0, 0, 0, 0,
- 83, 97, 109, 112, 108, 101, 77, 97, 115, 107, 101, 100, 84, 101, 120,
- 116, 117, 114, 101, 0, 68, 4, 0, 0, 68, 88, 66, 67, 77, 85,
- 167, 240, 56, 56, 155, 78, 125, 96, 49, 253, 103, 100, 22, 62, 1,
- 0, 0, 0, 68, 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0,
- 248, 0, 0, 0, 244, 1, 0, 0, 112, 2, 0, 0, 160, 3, 0,
- 0, 212, 3, 0, 0, 65, 111, 110, 57, 184, 0, 0, 0, 184, 0,
- 0, 0, 0, 2, 254, 255, 132, 0, 0, 0, 52, 0, 0, 0, 1,
- 0, 36, 0, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 36, 0,
- 1, 0, 48, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0, 5, 4, 0,
- 15, 160, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0,
- 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144,
- 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238,
- 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 12, 224, 0, 0,
- 20, 144, 3, 0, 180, 160, 3, 0, 20, 160, 4, 0, 0, 4, 0,
- 0, 3, 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160,
- 2, 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228,
- 160, 1, 0, 0, 2, 0, 0, 12, 192, 4, 0, 68, 160, 255, 255,
- 0, 0, 83, 72, 68, 82, 244, 0, 0, 0, 64, 0, 1, 0, 61,
- 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0,
- 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101,
- 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0, 50, 0, 0, 11,
- 50, 32, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0,
- 0, 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 8, 194,
- 32, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0,
- 11, 50, 32, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0,
- 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 70,
- 128, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 11,
- 194, 32, 16, 0, 1, 0, 0, 0, 6, 20, 16, 0, 0, 0, 0,
- 0, 166, 142, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 132,
- 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83,
- 84, 65, 84, 116, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 82, 68, 69, 70, 40, 1, 0, 0, 1, 0, 0, 0,
- 64, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 0, 4, 254,
- 255, 0, 1, 0, 0, 246, 0, 0, 0, 60, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0,
- 60, 0, 0, 0, 4, 0, 0, 0, 88, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0,
- 0, 0, 0, 212, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,
- 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0,
- 0, 32, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0,
- 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 48, 0, 0, 0, 16,
- 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0,
- 81, 117, 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3,
- 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101,
- 120, 67, 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120,
- 67, 111, 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111,
- 114, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41,
- 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111,
- 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48,
- 46, 49, 54, 51, 56, 52, 0, 73, 83, 71, 78, 44, 0, 0, 0,
- 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3,
- 0, 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79,
- 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0,
- 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3,
- 12, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95,
- 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79,
- 82, 68, 0, 171, 171, 171, 85, 250, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 212, 3, 0, 0,
- 68, 88, 66, 67, 98, 136, 224, 212, 103, 235, 205, 77, 125, 241, 101,
- 150, 199, 56, 208, 85, 1, 0, 0, 0, 212, 3, 0, 0, 6, 0,
- 0, 0, 56, 0, 0, 0, 224, 0, 0, 0, 188, 1, 0, 0, 56,
- 2, 0, 0, 48, 3, 0, 0, 160, 3, 0, 0, 65, 111, 110, 57,
- 160, 0, 0, 0, 160, 0, 0, 0, 0, 2, 255, 255, 116, 0, 0,
- 0, 44, 0, 0, 0, 0, 0, 44, 0, 0, 0, 44, 0, 0, 0,
- 44, 0, 2, 0, 36, 0, 0, 0, 44, 0, 0, 0, 0, 0, 1,
- 1, 1, 0, 1, 2, 255, 255, 31, 0, 0, 2, 0, 0, 0, 128,
- 0, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0, 144, 0, 8, 15,
- 160, 31, 0, 0, 2, 0, 0, 0, 144, 1, 8, 15, 160, 1, 0,
- 0, 2, 0, 0, 3, 128, 0, 0, 235, 176, 66, 0, 0, 3, 1,
- 0, 15, 128, 0, 0, 228, 176, 0, 8, 228, 160, 66, 0, 0, 3,
- 0, 0, 15, 128, 0, 0, 228, 128, 1, 8, 228, 160, 5, 0, 0,
- 3, 0, 0, 15, 128, 0, 0, 255, 128, 1, 0, 228, 128, 1, 0,
- 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0, 83,
- 72, 68, 82, 212, 0, 0, 0, 64, 0, 0, 0, 53, 0, 0, 0,
- 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 90, 0, 0,
- 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0, 4, 0, 112,
- 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24, 0, 4, 0,
- 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0, 3,
- 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3, 194, 16, 16,
- 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 0, 0,
- 0, 0, 104, 0, 0, 2, 2, 0, 0, 0, 69, 0, 0, 9, 242,
- 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0,
- 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0,
- 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 230, 26,
- 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0,
- 96, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16, 0,
- 0, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 246, 15, 16,
- 0, 1, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68,
- 69, 70, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0,
- 187, 0, 0, 0, 156, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0, 0, 2, 0, 0,
- 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 182, 0, 0, 0, 2,
- 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255,
- 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 115, 83, 97,
- 109, 112, 108, 101, 114, 0, 115, 77, 97, 115, 107, 83, 97, 109, 112,
- 108, 101, 114, 0, 116, 101, 120, 0, 109, 97, 115, 107, 0, 77, 105,
- 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83,
- 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108,
- 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51,
- 56, 52, 0, 171, 171, 171, 73, 83, 71, 78, 104, 0, 0, 0, 3,
- 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 12, 12, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110,
- 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83,
- 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103,
- 101, 116, 0, 171, 171, 177, 254, 0, 0, 0, 0, 0, 0, 83, 97,
- 109, 112, 108, 101, 84, 101, 120, 116, 117, 114, 101, 87, 105, 116, 104,
- 83, 104, 97, 100, 111, 119, 0, 4, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 128, 63, 1, 0, 0, 0, 0, 0, 128, 63, 1, 0, 0,
- 0, 0, 0, 128, 63, 1, 0, 0, 0, 0, 0, 128, 63, 1, 0,
- 0, 0, 3, 0, 0, 0, 255, 255, 255, 255, 68, 4, 0, 0, 68,
- 88, 66, 67, 77, 85, 167, 240, 56, 56, 155, 78, 125, 96, 49, 253,
- 103, 100, 22, 62, 1, 0, 0, 0, 68, 4, 0, 0, 6, 0, 0,
- 0, 56, 0, 0, 0, 248, 0, 0, 0, 244, 1, 0, 0, 112, 2,
- 0, 0, 160, 3, 0, 0, 212, 3, 0, 0, 65, 111, 110, 57, 184,
- 0, 0, 0, 184, 0, 0, 0, 0, 2, 254, 255, 132, 0, 0, 0,
- 52, 0, 0, 0, 1, 0, 36, 0, 0, 0, 48, 0, 0, 0, 48,
- 0, 0, 0, 36, 0, 1, 0, 48, 0, 0, 0, 0, 0, 3, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 254, 255, 81,
- 0, 0, 5, 4, 0, 15, 160, 0, 0, 0, 0, 0, 0, 128, 63,
- 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 5, 0, 0,
- 128, 0, 0, 15, 144, 4, 0, 0, 4, 0, 0, 3, 224, 0, 0,
- 228, 144, 2, 0, 238, 160, 2, 0, 228, 160, 4, 0, 0, 4, 0,
- 0, 12, 224, 0, 0, 20, 144, 3, 0, 180, 160, 3, 0, 20, 160,
- 4, 0, 0, 4, 0, 0, 3, 128, 0, 0, 228, 144, 1, 0, 238,
- 160, 1, 0, 228, 160, 2, 0, 0, 3, 0, 0, 3, 192, 0, 0,
- 228, 128, 0, 0, 228, 160, 1, 0, 0, 2, 0, 0, 12, 192, 4,
- 0, 68, 160, 255, 255, 0, 0, 83, 72, 68, 82, 244, 0, 0, 0,
- 64, 0, 1, 0, 61, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 95, 0, 0, 3, 50, 16,
- 16, 0, 0, 0, 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0,
- 1, 0, 0, 0, 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0,
- 0, 50, 0, 0, 11, 50, 32, 16, 0, 0, 0, 0, 0, 70, 16,
- 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 54, 0, 0, 8, 194, 32, 16, 0, 0, 0, 0, 0, 2, 64, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 63, 50, 0, 0, 11, 50, 32, 16, 0, 1, 0, 0, 0, 70,
- 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 50, 0, 0, 11, 194, 32, 16, 0, 1, 0, 0, 0, 6, 20,
- 16, 0, 0, 0, 0, 0, 166, 142, 32, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 6, 132, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 40, 1, 0,
- 0, 1, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 0, 28, 0,
- 0, 0, 0, 4, 254, 255, 0, 1, 0, 0, 246, 0, 0, 0, 60,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 99, 98, 48, 0, 60, 0, 0, 0, 4, 0, 0, 0, 88, 0,
- 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184,
- 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0,
- 196, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 16, 0, 0,
- 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0,
- 0, 0, 222, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0, 2,
- 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, 0,
- 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 196, 0, 0,
- 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101, 115, 99, 0, 171,
- 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 77, 97,
- 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 84, 101, 120,
- 116, 67, 111, 108, 111, 114, 0, 77, 105, 99, 114, 111, 115, 111, 102,
- 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100,
- 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46, 51,
- 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 73, 83, 71,
- 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 7, 3, 0, 0, 80, 79, 83, 73, 84, 73, 79, 78,
- 0, 171, 171, 171, 79, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0,
- 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 3, 12, 0, 0, 92, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3,
- 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84,
- 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 217, 2, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 232, 9, 0, 0, 68, 88, 66, 67, 128, 131, 241, 85, 199, 21,
- 192, 89, 55, 255, 82, 94, 121, 175, 16, 184, 1, 0, 0, 0, 232,
- 9, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 248, 2, 0, 0,
- 8, 7, 0, 0, 132, 7, 0, 0, 68, 9, 0, 0, 180, 9, 0,
- 0, 65, 111, 110, 57, 184, 2, 0, 0, 184, 2, 0, 0, 0, 2,
- 255, 255, 120, 2, 0, 0, 64, 0, 0, 0, 2, 0, 40, 0, 0,
- 0, 64, 0, 0, 0, 64, 0, 1, 0, 36, 0, 0, 0, 64, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 0, 4, 0, 3, 0, 0, 0, 0, 0, 1, 2,
- 255, 255, 31, 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31,
- 0, 0, 2, 0, 0, 0, 144, 0, 8, 15, 160, 2, 0, 0, 3,
- 0, 0, 1, 128, 0, 0, 0, 176, 0, 0, 85, 160, 1, 0, 0,
- 2, 0, 0, 2, 128, 0, 0, 85, 176, 2, 0, 0, 3, 1, 0,
- 1, 128, 0, 0, 0, 176, 0, 0, 0, 160, 1, 0, 0, 2, 1,
- 0, 2, 128, 0, 0, 85, 176, 66, 0, 0, 3, 0, 0, 15, 128,
- 0, 0, 228, 128, 0, 8, 228, 160, 66, 0, 0, 3, 1, 0, 15,
- 128, 1, 0, 228, 128, 0, 8, 228, 160, 5, 0, 0, 3, 0, 0,
- 1, 128, 0, 0, 255, 128, 3, 0, 85, 160, 4, 0, 0, 4, 0,
- 0, 1, 128, 3, 0, 0, 160, 1, 0, 255, 128, 0, 0, 0, 128,
- 2, 0, 0, 3, 1, 0, 1, 128, 0, 0, 0, 176, 0, 0, 170,
- 160, 1, 0, 0, 2, 1, 0, 2, 128, 0, 0, 85, 176, 2, 0,
- 0, 3, 2, 0, 1, 128, 0, 0, 0, 176, 0, 0, 255, 160, 1,
- 0, 0, 2, 2, 0, 2, 128, 0, 0, 85, 176, 66, 0, 0, 3,
- 1, 0, 15, 128, 1, 0, 228, 128, 0, 8, 228, 160, 66, 0, 0,
- 3, 2, 0, 15, 128, 2, 0, 228, 128, 0, 8, 228, 160, 4, 0,
- 0, 4, 0, 0, 1, 128, 3, 0, 170, 160, 1, 0, 255, 128, 0,
- 0, 0, 128, 4, 0, 0, 4, 0, 0, 1, 128, 3, 0, 255, 160,
- 2, 0, 255, 128, 0, 0, 0, 128, 2, 0, 0, 3, 1, 0, 1,
- 128, 0, 0, 0, 176, 1, 0, 0, 160, 1, 0, 0, 2, 1, 0,
- 2, 128, 0, 0, 85, 176, 2, 0, 0, 3, 2, 0, 1, 128, 0,
- 0, 0, 176, 1, 0, 85, 160, 1, 0, 0, 2, 2, 0, 2, 128,
- 0, 0, 85, 176, 66, 0, 0, 3, 1, 0, 15, 128, 1, 0, 228,
- 128, 0, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 2, 0,
- 228, 128, 0, 8, 228, 160, 4, 0, 0, 4, 0, 0, 1, 128, 4,
- 0, 0, 160, 1, 0, 255, 128, 0, 0, 0, 128, 4, 0, 0, 4,
- 0, 0, 1, 128, 4, 0, 85, 160, 2, 0, 255, 128, 0, 0, 0,
- 128, 2, 0, 0, 3, 1, 0, 1, 128, 0, 0, 0, 176, 1, 0,
- 170, 160, 1, 0, 0, 2, 1, 0, 2, 128, 0, 0, 85, 176, 2,
- 0, 0, 3, 2, 0, 1, 128, 0, 0, 0, 176, 1, 0, 255, 160,
- 1, 0, 0, 2, 2, 0, 2, 128, 0, 0, 85, 176, 66, 0, 0,
- 3, 1, 0, 15, 128, 1, 0, 228, 128, 0, 8, 228, 160, 66, 0,
- 0, 3, 2, 0, 15, 128, 2, 0, 228, 128, 0, 8, 228, 160, 4,
- 0, 0, 4, 0, 0, 1, 128, 4, 0, 170, 160, 1, 0, 255, 128,
- 0, 0, 0, 128, 4, 0, 0, 4, 0, 0, 1, 128, 4, 0, 255,
- 160, 2, 0, 255, 128, 0, 0, 0, 128, 2, 0, 0, 3, 1, 0,
- 1, 128, 0, 0, 0, 176, 2, 0, 0, 160, 1, 0, 0, 2, 1,
- 0, 2, 128, 0, 0, 85, 176, 66, 0, 0, 3, 1, 0, 15, 128,
- 1, 0, 228, 128, 0, 8, 228, 160, 4, 0, 0, 4, 0, 0, 1,
- 128, 5, 0, 0, 160, 1, 0, 255, 128, 0, 0, 0, 128, 5, 0,
- 0, 3, 0, 0, 15, 128, 0, 0, 0, 128, 6, 0, 228, 160, 1,
- 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0,
- 83, 72, 68, 82, 8, 4, 0, 0, 64, 0, 0, 0, 2, 1, 0,
- 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 10, 0,
- 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 88,
- 24, 0, 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0,
- 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0,
- 3, 242, 32, 16, 0, 0, 0, 0, 0, 104, 0, 0, 2, 4, 0,
- 0, 0, 0, 0, 0, 8, 242, 0, 16, 0, 0, 0, 0, 0, 6,
- 16, 16, 0, 1, 0, 0, 0, 38, 135, 32, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 54, 0, 0, 5, 82, 0, 16, 0, 1, 0, 0,
- 0, 86, 7, 16, 0, 0, 0, 0, 0, 54, 0, 0, 5, 162, 0,
- 16, 0, 1, 0, 0, 0, 86, 21, 16, 0, 1, 0, 0, 0, 69,
- 0, 0, 9, 242, 0, 16, 0, 2, 0, 0, 0, 230, 10, 16, 0,
- 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16,
- 0, 0, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0,
- 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0,
- 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 56, 0, 0, 8,
- 18, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 2, 0, 0,
- 0, 26, 128, 32, 0, 0, 0, 0, 0, 6, 0, 0, 0, 50, 0,
- 0, 10, 18, 0, 16, 0, 1, 0, 0, 0, 10, 128, 32, 0, 0,
- 0, 0, 0, 6, 0, 0, 0, 58, 0, 16, 0, 1, 0, 0, 0,
- 10, 0, 16, 0, 1, 0, 0, 0, 54, 0, 0, 5, 162, 0, 16,
- 0, 0, 0, 0, 0, 86, 21, 16, 0, 1, 0, 0, 0, 69, 0,
- 0, 9, 242, 0, 16, 0, 2, 0, 0, 0, 70, 0, 16, 0, 0,
- 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0,
- 0, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0,
- 0, 230, 10, 16, 0, 0, 0, 0, 0, 70, 126, 16, 0, 0, 0,
- 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 18,
- 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 58, 0, 16, 0, 2, 0, 0, 0, 10, 0, 16,
- 0, 1, 0, 0, 0, 50, 0, 0, 10, 18, 0, 16, 0, 0, 0,
- 0, 0, 58, 128, 32, 0, 0, 0, 0, 0, 6, 0, 0, 0, 58,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 0, 8, 242, 0, 16, 0, 1, 0, 0, 0, 6, 16, 16,
- 0, 1, 0, 0, 0, 38, 135, 32, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 54, 0, 0, 5, 82, 0, 16, 0, 2, 0, 0, 0, 86,
- 7, 16, 0, 1, 0, 0, 0, 54, 0, 0, 5, 162, 0, 16, 0,
- 2, 0, 0, 0, 86, 21, 16, 0, 1, 0, 0, 0, 69, 0, 0,
- 9, 242, 0, 16, 0, 3, 0, 0, 0, 70, 0, 16, 0, 2, 0,
- 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0,
- 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 2, 0, 0, 0,
- 230, 10, 16, 0, 2, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0,
- 0, 0, 96, 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 18, 0,
- 16, 0, 0, 0, 0, 0, 10, 128, 32, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 58, 0, 16, 0, 3, 0, 0, 0, 10, 0, 16, 0,
- 0, 0, 0, 0, 50, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0,
- 0, 26, 128, 32, 0, 0, 0, 0, 0, 7, 0, 0, 0, 58, 0,
- 16, 0, 2, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 54,
- 0, 0, 5, 162, 0, 16, 0, 1, 0, 0, 0, 86, 21, 16, 0,
- 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 2, 0, 0,
- 0, 70, 0, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0,
- 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 69, 0, 0, 9, 242,
- 0, 16, 0, 1, 0, 0, 0, 230, 10, 16, 0, 1, 0, 0, 0,
- 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0,
- 0, 50, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0, 0, 42, 128,
- 32, 0, 0, 0, 0, 0, 7, 0, 0, 0, 58, 0, 16, 0, 2,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 50, 0, 0, 10,
- 18, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 58, 0, 16, 0, 1, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 0, 8, 18, 0, 16, 0, 1,
- 0, 0, 0, 10, 16, 16, 0, 1, 0, 0, 0, 10, 128, 32, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 54, 0, 0, 5, 34, 0, 16,
- 0, 1, 0, 0, 0, 26, 16, 16, 0, 1, 0, 0, 0, 69, 0,
- 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 1,
- 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0,
- 0, 0, 0, 0, 50, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0,
- 0, 10, 128, 32, 0, 0, 0, 0, 0, 8, 0, 0, 0, 58, 0,
- 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 56,
- 0, 0, 8, 242, 32, 16, 0, 0, 0, 0, 0, 6, 0, 16, 0,
- 0, 0, 0, 0, 70, 142, 32, 0, 0, 0, 0, 0, 9, 0, 0,
- 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 30, 0,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 184, 1,
- 0, 0, 1, 0, 0, 0, 148, 0, 0, 0, 3, 0, 0, 0, 28,
- 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0, 132, 1, 0, 0,
- 124, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 139, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4,
- 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0,
- 12, 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 115, 83, 104, 97, 100, 111, 119, 83, 97,
- 109, 112, 108, 101, 114, 0, 116, 101, 120, 0, 99, 98, 49, 0, 171,
- 143, 0, 0, 0, 4, 0, 0, 0, 172, 0, 0, 0, 160, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0,
- 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 28, 1, 0, 0, 0,
- 0, 0, 0, 44, 1, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0,
- 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 0, 0, 76, 1, 0,
- 0, 96, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 88, 1,
- 0, 0, 0, 0, 0, 0, 104, 1, 0, 0, 144, 0, 0, 0, 16,
- 0, 0, 0, 2, 0, 0, 0, 116, 1, 0, 0, 0, 0, 0, 0,
- 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, 72, 0, 171, 171,
- 171, 1, 0, 3, 0, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, 86, 0,
- 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 66, 108, 117, 114, 87, 101, 105, 103, 104, 116, 115,
- 0, 1, 0, 3, 0, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 83, 104, 97, 100, 111, 119, 67, 111, 108, 111, 114, 0, 1,
- 0, 3, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72,
- 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112,
- 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49,
- 54, 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 104, 0, 0, 0,
- 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0,
- 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
- 0, 12, 0, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111,
- 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79,
- 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114,
- 103, 101, 116, 0, 171, 171, 53, 7, 1, 0, 0, 0, 0, 0, 80,
- 49, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 128, 63, 1,
- 0, 0, 0, 0, 0, 128, 63, 1, 0, 0, 0, 0, 0, 128, 63,
- 1, 0, 0, 0, 0, 0, 128, 63, 1, 0, 0, 0, 3, 0, 0,
- 0, 255, 255, 255, 255, 68, 4, 0, 0, 68, 88, 66, 67, 77, 85,
- 167, 240, 56, 56, 155, 78, 125, 96, 49, 253, 103, 100, 22, 62, 1,
- 0, 0, 0, 68, 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0,
- 248, 0, 0, 0, 244, 1, 0, 0, 112, 2, 0, 0, 160, 3, 0,
- 0, 212, 3, 0, 0, 65, 111, 110, 57, 184, 0, 0, 0, 184, 0,
- 0, 0, 0, 2, 254, 255, 132, 0, 0, 0, 52, 0, 0, 0, 1,
- 0, 36, 0, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 36, 0,
- 1, 0, 48, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 2, 254, 255, 81, 0, 0, 5, 4, 0,
- 15, 160, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0,
- 0, 0, 0, 31, 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144,
- 4, 0, 0, 4, 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238,
- 160, 2, 0, 228, 160, 4, 0, 0, 4, 0, 0, 12, 224, 0, 0,
- 20, 144, 3, 0, 180, 160, 3, 0, 20, 160, 4, 0, 0, 4, 0,
- 0, 3, 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160,
- 2, 0, 0, 3, 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228,
- 160, 1, 0, 0, 2, 0, 0, 12, 192, 4, 0, 68, 160, 255, 255,
- 0, 0, 83, 72, 68, 82, 244, 0, 0, 0, 64, 0, 1, 0, 61,
- 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0,
- 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101,
- 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, 0, 50, 0, 0, 11,
- 50, 32, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0,
- 0, 230, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 8, 194,
- 32, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0,
- 11, 50, 32, 16, 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0,
- 0, 0, 230, 138, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 70,
- 128, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 11,
- 194, 32, 16, 0, 1, 0, 0, 0, 6, 20, 16, 0, 0, 0, 0,
- 0, 166, 142, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 132,
- 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83,
- 84, 65, 84, 116, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 82, 68, 69, 70, 40, 1, 0, 0, 1, 0, 0, 0,
- 64, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 0, 4, 254,
- 255, 0, 1, 0, 0, 246, 0, 0, 0, 60, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0,
- 60, 0, 0, 0, 4, 0, 0, 0, 88, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0,
- 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0,
- 0, 0, 0, 212, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0,
- 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0,
- 0, 32, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0,
- 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, 48, 0, 0, 0, 16,
- 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0,
- 81, 117, 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3,
- 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101,
- 120, 67, 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120,
- 67, 111, 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111,
- 114, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41,
- 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111,
- 109, 112, 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48,
- 46, 49, 54, 51, 56, 52, 0, 73, 83, 71, 78, 44, 0, 0, 0,
- 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3,
- 0, 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79,
- 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0,
- 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3,
- 12, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95,
- 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79,
- 82, 68, 0, 171, 171, 171, 92, 17, 1, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 172, 9, 0, 0,
- 68, 88, 66, 67, 67, 47, 1, 244, 0, 102, 246, 41, 38, 220, 84,
- 204, 156, 139, 96, 25, 1, 0, 0, 0, 172, 9, 0, 0, 6, 0,
- 0, 0, 56, 0, 0, 0, 220, 2, 0, 0, 204, 6, 0, 0, 72,
- 7, 0, 0, 8, 9, 0, 0, 120, 9, 0, 0, 65, 111, 110, 57,
- 156, 2, 0, 0, 156, 2, 0, 0, 0, 2, 255, 255, 104, 2, 0,
- 0, 52, 0, 0, 0, 1, 0, 40, 0, 0, 0, 52, 0, 0, 0,
- 52, 0, 1, 0, 36, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 2, 255, 255,
- 31, 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0,
- 2, 0, 0, 0, 144, 0, 8, 15, 160, 2, 0, 0, 3, 0, 0,
- 2, 128, 0, 0, 85, 176, 0, 0, 85, 160, 1, 0, 0, 2, 0,
- 0, 1, 128, 0, 0, 0, 176, 2, 0, 0, 3, 1, 0, 2, 128,
- 0, 0, 85, 176, 0, 0, 0, 160, 1, 0, 0, 2, 1, 0, 1,
- 128, 0, 0, 0, 176, 66, 0, 0, 3, 0, 0, 15, 128, 0, 0,
- 228, 128, 0, 8, 228, 160, 66, 0, 0, 3, 1, 0, 15, 128, 1,
- 0, 228, 128, 0, 8, 228, 160, 5, 0, 0, 3, 0, 0, 15, 128,
- 0, 0, 228, 128, 3, 0, 85, 160, 4, 0, 0, 4, 0, 0, 15,
- 128, 3, 0, 0, 160, 1, 0, 228, 128, 0, 0, 228, 128, 2, 0,
- 0, 3, 1, 0, 2, 128, 0, 0, 85, 176, 0, 0, 170, 160, 1,
- 0, 0, 2, 1, 0, 1, 128, 0, 0, 0, 176, 2, 0, 0, 3,
- 2, 0, 2, 128, 0, 0, 85, 176, 0, 0, 255, 160, 1, 0, 0,
- 2, 2, 0, 1, 128, 0, 0, 0, 176, 66, 0, 0, 3, 1, 0,
- 15, 128, 1, 0, 228, 128, 0, 8, 228, 160, 66, 0, 0, 3, 2,
- 0, 15, 128, 2, 0, 228, 128, 0, 8, 228, 160, 4, 0, 0, 4,
- 0, 0, 15, 128, 3, 0, 170, 160, 1, 0, 228, 128, 0, 0, 228,
- 128, 4, 0, 0, 4, 0, 0, 15, 128, 3, 0, 255, 160, 2, 0,
- 228, 128, 0, 0, 228, 128, 2, 0, 0, 3, 1, 0, 2, 128, 0,
- 0, 85, 176, 1, 0, 0, 160, 1, 0, 0, 2, 1, 0, 1, 128,
- 0, 0, 0, 176, 2, 0, 0, 3, 2, 0, 2, 128, 0, 0, 85,
- 176, 1, 0, 85, 160, 1, 0, 0, 2, 2, 0, 1, 128, 0, 0,
- 0, 176, 66, 0, 0, 3, 1, 0, 15, 128, 1, 0, 228, 128, 0,
- 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 2, 0, 228, 128,
- 0, 8, 228, 160, 4, 0, 0, 4, 0, 0, 15, 128, 4, 0, 0,
- 160, 1, 0, 228, 128, 0, 0, 228, 128, 4, 0, 0, 4, 0, 0,
- 15, 128, 4, 0, 85, 160, 2, 0, 228, 128, 0, 0, 228, 128, 2,
- 0, 0, 3, 1, 0, 2, 128, 0, 0, 85, 176, 1, 0, 170, 160,
- 1, 0, 0, 2, 1, 0, 1, 128, 0, 0, 0, 176, 2, 0, 0,
- 3, 2, 0, 2, 128, 0, 0, 85, 176, 1, 0, 255, 160, 1, 0,
- 0, 2, 2, 0, 1, 128, 0, 0, 0, 176, 66, 0, 0, 3, 1,
- 0, 15, 128, 1, 0, 228, 128, 0, 8, 228, 160, 66, 0, 0, 3,
- 2, 0, 15, 128, 2, 0, 228, 128, 0, 8, 228, 160, 4, 0, 0,
- 4, 0, 0, 15, 128, 4, 0, 170, 160, 1, 0, 228, 128, 0, 0,
- 228, 128, 4, 0, 0, 4, 0, 0, 15, 128, 4, 0, 255, 160, 2,
- 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 3, 1, 0, 2, 128,
- 0, 0, 85, 176, 2, 0, 0, 160, 1, 0, 0, 2, 1, 0, 1,
- 128, 0, 0, 0, 176, 66, 0, 0, 3, 1, 0, 15, 128, 1, 0,
- 228, 128, 0, 8, 228, 160, 4, 0, 0, 4, 0, 0, 15, 128, 5,
- 0, 0, 160, 1, 0, 228, 128, 0, 0, 228, 128, 1, 0, 0, 2,
- 0, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0, 83, 72, 68,
- 82, 232, 3, 0, 0, 64, 0, 0, 0, 250, 0, 0, 0, 89, 0,
- 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 9, 0, 0, 0, 90,
- 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 88, 24, 0, 4,
- 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0,
- 3, 50, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32,
- 16, 0, 0, 0, 0, 0, 104, 0, 0, 2, 4, 0, 0, 0, 54,
- 0, 0, 5, 82, 0, 16, 0, 0, 0, 0, 0, 6, 16, 16, 0,
- 1, 0, 0, 0, 0, 0, 0, 8, 242, 0, 16, 0, 1, 0, 0,
- 0, 86, 21, 16, 0, 1, 0, 0, 0, 134, 141, 32, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 54, 0, 0, 5, 162, 0, 16, 0, 0,
- 0, 0, 0, 6, 8, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9,
- 242, 0, 16, 0, 2, 0, 0, 0, 230, 10, 16, 0, 0, 0, 0,
- 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0,
- 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0, 0, 70,
- 0, 16, 0, 0, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0,
- 0, 96, 16, 0, 0, 0, 0, 0, 56, 0, 0, 8, 242, 0, 16,
- 0, 2, 0, 0, 0, 70, 14, 16, 0, 2, 0, 0, 0, 86, 133,
- 32, 0, 0, 0, 0, 0, 6, 0, 0, 0, 50, 0, 0, 10, 242,
- 0, 16, 0, 0, 0, 0, 0, 6, 128, 32, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 70, 14, 16,
- 0, 2, 0, 0, 0, 54, 0, 0, 5, 82, 0, 16, 0, 1, 0,
- 0, 0, 6, 16, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242,
- 0, 16, 0, 2, 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0,
- 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0,
- 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 230, 10,
- 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0,
- 96, 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0,
- 0, 0, 0, 0, 166, 138, 32, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 70, 14, 16, 0, 2, 0, 0, 0, 70, 14, 16, 0, 0, 0,
- 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0, 0, 0, 0, 246,
- 143, 32, 0, 0, 0, 0, 0, 6, 0, 0, 0, 70, 14, 16, 0,
- 1, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 54, 0, 0,
- 5, 82, 0, 16, 0, 1, 0, 0, 0, 6, 16, 16, 0, 1, 0,
- 0, 0, 0, 0, 0, 8, 242, 0, 16, 0, 2, 0, 0, 0, 86,
- 21, 16, 0, 1, 0, 0, 0, 134, 141, 32, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 54, 0, 0, 5, 162, 0, 16, 0, 1, 0, 0,
- 0, 6, 8, 16, 0, 2, 0, 0, 0, 69, 0, 0, 9, 242, 0,
- 16, 0, 3, 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 70,
- 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0,
- 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 230, 10, 16,
- 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96,
- 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0,
- 0, 0, 0, 6, 128, 32, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 70, 14, 16, 0, 3, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0,
- 0, 50, 0, 0, 10, 242, 0, 16, 0, 0, 0, 0, 0, 86, 133,
- 32, 0, 0, 0, 0, 0, 7, 0, 0, 0, 70, 14, 16, 0, 1,
- 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 54, 0, 0, 5,
- 82, 0, 16, 0, 2, 0, 0, 0, 6, 16, 16, 0, 1, 0, 0,
- 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 70, 0,
- 16, 0, 2, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0,
- 96, 16, 0, 0, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0,
- 2, 0, 0, 0, 230, 10, 16, 0, 2, 0, 0, 0, 70, 126, 16,
- 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 50, 0,
- 0, 10, 242, 0, 16, 0, 0, 0, 0, 0, 166, 138, 32, 0, 0,
- 0, 0, 0, 7, 0, 0, 0, 70, 14, 16, 0, 1, 0, 0, 0,
- 70, 14, 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16,
- 0, 0, 0, 0, 0, 246, 143, 32, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 70, 14, 16, 0, 2, 0, 0, 0, 70, 14, 16, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 34, 0, 16, 0, 1, 0, 0, 0,
- 26, 16, 16, 0, 1, 0, 0, 0, 10, 128, 32, 0, 0, 0, 0,
- 0, 5, 0, 0, 0, 54, 0, 0, 5, 18, 0, 16, 0, 1, 0,
- 0, 0, 10, 16, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242,
- 0, 16, 0, 1, 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0,
- 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0,
- 0, 50, 0, 0, 10, 242, 32, 16, 0, 0, 0, 0, 0, 6, 128,
- 32, 0, 0, 0, 0, 0, 8, 0, 0, 0, 70, 14, 16, 0, 1,
- 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 62, 0, 0, 1,
- 83, 84, 65, 84, 116, 0, 0, 0, 29, 0, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 12, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 68, 69, 70, 184, 1, 0, 0, 1, 0, 0,
- 0, 148, 0, 0, 0, 3, 0, 0, 0, 28, 0, 0, 0, 0, 4,
- 255, 255, 0, 1, 0, 0, 132, 1, 0, 0, 124, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0,
- 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255,
- 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 143,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 115, 83, 104, 97, 100, 111, 119, 83, 97, 109, 112, 108, 101, 114,
- 0, 116, 101, 120, 0, 99, 98, 49, 0, 171, 143, 0, 0, 0, 4,
- 0, 0, 0, 172, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 48, 0, 0,
- 0, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 44, 1,
- 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 60,
- 1, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 96, 0, 0, 0,
- 48, 0, 0, 0, 2, 0, 0, 0, 88, 1, 0, 0, 0, 0, 0,
- 0, 104, 1, 0, 0, 144, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 116, 1, 0, 0, 0, 0, 0, 0, 66, 108, 117, 114, 79,
- 102, 102, 115, 101, 116, 115, 72, 0, 171, 171, 171, 1, 0, 3, 0,
- 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 66, 108, 117,
- 114, 79, 102, 102, 115, 101, 116, 115, 86, 0, 171, 171, 171, 1, 0,
- 3, 0, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 66,
- 108, 117, 114, 87, 101, 105, 103, 104, 116, 115, 0, 1, 0, 3, 0,
- 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 83, 104, 97,
- 100, 111, 119, 67, 111, 108, 111, 114, 0, 1, 0, 3, 0, 1, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 105, 99, 114, 111,
- 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83,
- 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32,
- 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0,
- 171, 171, 73, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8,
- 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0,
- 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0,
- 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88,
- 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83, 71, 78, 44, 0,
- 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171,
- 171, 184, 21, 1, 0, 0, 0, 0, 0, 80, 50, 0, 4, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 128, 63, 1, 0, 0, 0, 0, 0,
- 128, 63, 1, 0, 0, 0, 0, 0, 128, 63, 1, 0, 0, 0, 0,
- 0, 128, 63, 1, 0, 0, 0, 3, 0, 0, 0, 255, 255, 255, 255,
- 68, 4, 0, 0, 68, 88, 66, 67, 77, 85, 167, 240, 56, 56, 155,
- 78, 125, 96, 49, 253, 103, 100, 22, 62, 1, 0, 0, 0, 68, 4,
- 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 248, 0, 0, 0, 244,
- 1, 0, 0, 112, 2, 0, 0, 160, 3, 0, 0, 212, 3, 0, 0,
- 65, 111, 110, 57, 184, 0, 0, 0, 184, 0, 0, 0, 0, 2, 254,
- 255, 132, 0, 0, 0, 52, 0, 0, 0, 1, 0, 36, 0, 0, 0,
- 48, 0, 0, 0, 48, 0, 0, 0, 36, 0, 1, 0, 48, 0, 0,
- 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 254, 255, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0, 0,
- 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0,
- 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4, 0, 0, 4, 0,
- 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160, 2, 0, 228, 160,
- 4, 0, 0, 4, 0, 0, 12, 224, 0, 0, 20, 144, 3, 0, 180,
- 160, 3, 0, 20, 160, 4, 0, 0, 4, 0, 0, 3, 128, 0, 0,
- 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0, 0, 3, 0,
- 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160, 1, 0, 0, 2,
- 0, 0, 12, 192, 4, 0, 68, 160, 255, 255, 0, 0, 83, 72, 68,
- 82, 244, 0, 0, 0, 64, 0, 1, 0, 61, 0, 0, 0, 89, 0,
- 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 95,
- 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0, 0, 4,
- 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101, 0, 0,
- 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 194, 32,
- 16, 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0, 0,
- 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0, 0, 0,
- 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50, 32, 16, 0,
- 1, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 50, 0, 0, 11, 194, 32, 16, 0, 1,
- 0, 0, 0, 6, 20, 16, 0, 0, 0, 0, 0, 166, 142, 32, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 6, 132, 32, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0,
- 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68,
- 69, 70, 40, 1, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 1,
- 0, 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0, 0,
- 246, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 60, 0, 0, 0, 4,
- 0, 0, 0, 88, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,
- 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 212, 0,
- 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196,
- 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 32, 0, 0, 0,
- 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0,
- 0, 236, 0, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68,
- 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114,
- 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100,
- 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 77, 105, 99,
- 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76,
- 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101,
- 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56,
- 52, 0, 73, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8,
- 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79, 83,
- 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83, 71, 78, 104, 0,
- 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12, 0, 0, 92, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
- 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116,
- 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171,
- 171, 163, 31, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 164, 10, 0, 0, 68, 88, 66, 67, 70,
- 166, 174, 156, 153, 145, 163, 116, 127, 37, 205, 162, 136, 116, 62, 222,
- 1, 0, 0, 0, 164, 10, 0, 0, 6, 0, 0, 0, 56, 0, 0,
- 0, 24, 3, 0, 0, 112, 7, 0, 0, 236, 7, 0, 0, 0, 10,
- 0, 0, 112, 10, 0, 0, 65, 111, 110, 57, 216, 2, 0, 0, 216,
- 2, 0, 0, 0, 2, 255, 255, 160, 2, 0, 0, 56, 0, 0, 0,
- 1, 0, 44, 0, 0, 0, 56, 0, 0, 0, 56, 0, 2, 0, 36,
- 0, 0, 0, 56, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 3, 0, 6, 0, 0, 0, 0, 0, 0, 0, 1, 2, 255, 255, 31,
- 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2,
- 0, 0, 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0,
- 144, 1, 8, 15, 160, 2, 0, 0, 3, 0, 0, 2, 128, 0, 0,
- 85, 176, 0, 0, 85, 160, 1, 0, 0, 2, 0, 0, 1, 128, 0,
- 0, 0, 176, 2, 0, 0, 3, 1, 0, 2, 128, 0, 0, 85, 176,
- 0, 0, 0, 160, 1, 0, 0, 2, 1, 0, 1, 128, 0, 0, 0,
- 176, 66, 0, 0, 3, 0, 0, 15, 128, 0, 0, 228, 128, 1, 8,
- 228, 160, 66, 0, 0, 3, 1, 0, 15, 128, 1, 0, 228, 128, 1,
- 8, 228, 160, 5, 0, 0, 3, 0, 0, 15, 128, 0, 0, 228, 128,
- 3, 0, 85, 160, 4, 0, 0, 4, 0, 0, 15, 128, 3, 0, 0,
- 160, 1, 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 3, 1, 0,
- 2, 128, 0, 0, 85, 176, 0, 0, 170, 160, 1, 0, 0, 2, 1,
- 0, 1, 128, 0, 0, 0, 176, 2, 0, 0, 3, 2, 0, 2, 128,
- 0, 0, 85, 176, 0, 0, 255, 160, 1, 0, 0, 2, 2, 0, 1,
- 128, 0, 0, 0, 176, 66, 0, 0, 3, 1, 0, 15, 128, 1, 0,
- 228, 128, 1, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 2,
- 0, 228, 128, 1, 8, 228, 160, 4, 0, 0, 4, 0, 0, 15, 128,
- 3, 0, 170, 160, 1, 0, 228, 128, 0, 0, 228, 128, 4, 0, 0,
- 4, 0, 0, 15, 128, 3, 0, 255, 160, 2, 0, 228, 128, 0, 0,
- 228, 128, 2, 0, 0, 3, 1, 0, 2, 128, 0, 0, 85, 176, 1,
- 0, 0, 160, 1, 0, 0, 2, 1, 0, 1, 128, 0, 0, 0, 176,
- 2, 0, 0, 3, 2, 0, 2, 128, 0, 0, 85, 176, 1, 0, 85,
- 160, 1, 0, 0, 2, 2, 0, 1, 128, 0, 0, 0, 176, 66, 0,
- 0, 3, 1, 0, 15, 128, 1, 0, 228, 128, 1, 8, 228, 160, 66,
- 0, 0, 3, 2, 0, 15, 128, 2, 0, 228, 128, 1, 8, 228, 160,
- 4, 0, 0, 4, 0, 0, 15, 128, 4, 0, 0, 160, 1, 0, 228,
- 128, 0, 0, 228, 128, 4, 0, 0, 4, 0, 0, 15, 128, 4, 0,
- 85, 160, 2, 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 3, 1,
- 0, 2, 128, 0, 0, 85, 176, 1, 0, 170, 160, 1, 0, 0, 2,
- 1, 0, 1, 128, 0, 0, 0, 176, 2, 0, 0, 3, 2, 0, 2,
- 128, 0, 0, 85, 176, 1, 0, 255, 160, 1, 0, 0, 2, 2, 0,
- 1, 128, 0, 0, 0, 176, 66, 0, 0, 3, 1, 0, 15, 128, 1,
- 0, 228, 128, 1, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128,
- 2, 0, 228, 128, 1, 8, 228, 160, 4, 0, 0, 4, 0, 0, 15,
- 128, 4, 0, 170, 160, 1, 0, 228, 128, 0, 0, 228, 128, 4, 0,
- 0, 4, 0, 0, 15, 128, 4, 0, 255, 160, 2, 0, 228, 128, 0,
- 0, 228, 128, 2, 0, 0, 3, 1, 0, 2, 128, 0, 0, 85, 176,
- 2, 0, 0, 160, 1, 0, 0, 2, 1, 0, 1, 128, 0, 0, 0,
- 176, 1, 0, 0, 2, 2, 0, 3, 128, 0, 0, 235, 176, 66, 0,
- 0, 3, 1, 0, 15, 128, 1, 0, 228, 128, 1, 8, 228, 160, 66,
- 0, 0, 3, 2, 0, 15, 128, 2, 0, 228, 128, 0, 8, 228, 160,
- 4, 0, 0, 4, 0, 0, 15, 128, 5, 0, 0, 160, 1, 0, 228,
- 128, 0, 0, 228, 128, 5, 0, 0, 3, 0, 0, 15, 128, 2, 0,
- 255, 128, 0, 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128, 0,
- 0, 228, 128, 255, 255, 0, 0, 83, 72, 68, 82, 80, 4, 0, 0,
- 64, 0, 0, 0, 20, 1, 0, 0, 89, 0, 0, 4, 70, 142, 32,
- 0, 0, 0, 0, 0, 9, 0, 0, 0, 90, 0, 0, 3, 0, 96,
- 16, 0, 0, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 1,
- 0, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0, 0,
- 85, 85, 0, 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0, 0,
- 0, 85, 85, 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1, 0,
- 0, 0, 98, 16, 0, 3, 194, 16, 16, 0, 1, 0, 0, 0, 101,
- 0, 0, 3, 242, 32, 16, 0, 0, 0, 0, 0, 104, 0, 0, 2,
- 4, 0, 0, 0, 54, 0, 0, 5, 82, 0, 16, 0, 0, 0, 0,
- 0, 6, 16, 16, 0, 1, 0, 0, 0, 0, 0, 0, 8, 242, 0,
- 16, 0, 1, 0, 0, 0, 86, 21, 16, 0, 1, 0, 0, 0, 134,
- 141, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 54, 0, 0, 5,
- 162, 0, 16, 0, 0, 0, 0, 0, 6, 8, 16, 0, 1, 0, 0,
- 0, 69, 0, 0, 9, 242, 0, 16, 0, 2, 0, 0, 0, 230, 10,
- 16, 0, 0, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0,
- 96, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0,
- 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 70, 126, 16,
- 0, 0, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 56, 0,
- 0, 8, 242, 0, 16, 0, 2, 0, 0, 0, 70, 14, 16, 0, 2,
- 0, 0, 0, 86, 133, 32, 0, 0, 0, 0, 0, 6, 0, 0, 0,
- 50, 0, 0, 10, 242, 0, 16, 0, 0, 0, 0, 0, 6, 128, 32,
- 0, 0, 0, 0, 0, 6, 0, 0, 0, 70, 14, 16, 0, 0, 0,
- 0, 0, 70, 14, 16, 0, 2, 0, 0, 0, 54, 0, 0, 5, 82,
- 0, 16, 0, 1, 0, 0, 0, 6, 16, 16, 0, 1, 0, 0, 0,
- 69, 0, 0, 9, 242, 0, 16, 0, 2, 0, 0, 0, 70, 0, 16,
- 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96,
- 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1,
- 0, 0, 0, 230, 10, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0,
- 0, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 50, 0, 0,
- 10, 242, 0, 16, 0, 0, 0, 0, 0, 166, 138, 32, 0, 0, 0,
- 0, 0, 6, 0, 0, 0, 70, 14, 16, 0, 2, 0, 0, 0, 70,
- 14, 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0,
- 0, 0, 0, 0, 246, 143, 32, 0, 0, 0, 0, 0, 6, 0, 0,
- 0, 70, 14, 16, 0, 1, 0, 0, 0, 70, 14, 16, 0, 0, 0,
- 0, 0, 54, 0, 0, 5, 82, 0, 16, 0, 1, 0, 0, 0, 6,
- 16, 16, 0, 1, 0, 0, 0, 0, 0, 0, 8, 242, 0, 16, 0,
- 2, 0, 0, 0, 86, 21, 16, 0, 1, 0, 0, 0, 134, 141, 32,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 54, 0, 0, 5, 162, 0,
- 16, 0, 1, 0, 0, 0, 6, 8, 16, 0, 2, 0, 0, 0, 69,
- 0, 0, 9, 242, 0, 16, 0, 3, 0, 0, 0, 70, 0, 16, 0,
- 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16,
- 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0,
- 0, 0, 230, 10, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0,
- 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 50, 0, 0, 10,
- 242, 0, 16, 0, 0, 0, 0, 0, 6, 128, 32, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 70, 14, 16, 0, 3, 0, 0, 0, 70, 14,
- 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0,
- 0, 0, 0, 86, 133, 32, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 70, 14, 16, 0, 1, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0,
- 0, 54, 0, 0, 5, 82, 0, 16, 0, 2, 0, 0, 0, 6, 16,
- 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1,
- 0, 0, 0, 70, 0, 16, 0, 2, 0, 0, 0, 70, 126, 16, 0,
- 0, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 69, 0, 0,
- 9, 242, 0, 16, 0, 2, 0, 0, 0, 230, 10, 16, 0, 2, 0,
- 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 1,
- 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0, 0, 0, 0,
- 166, 138, 32, 0, 0, 0, 0, 0, 7, 0, 0, 0, 70, 14, 16,
- 0, 1, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 50, 0,
- 0, 10, 242, 0, 16, 0, 0, 0, 0, 0, 246, 143, 32, 0, 0,
- 0, 0, 0, 7, 0, 0, 0, 70, 14, 16, 0, 2, 0, 0, 0,
- 70, 14, 16, 0, 0, 0, 0, 0, 0, 0, 0, 8, 34, 0, 16,
- 0, 1, 0, 0, 0, 26, 16, 16, 0, 1, 0, 0, 0, 10, 128,
- 32, 0, 0, 0, 0, 0, 5, 0, 0, 0, 54, 0, 0, 5, 18,
- 0, 16, 0, 1, 0, 0, 0, 10, 16, 16, 0, 1, 0, 0, 0,
- 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16,
- 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96,
- 16, 0, 1, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0,
- 0, 0, 0, 6, 128, 32, 0, 0, 0, 0, 0, 8, 0, 0, 0,
- 70, 14, 16, 0, 1, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0,
- 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 230, 26,
- 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0,
- 96, 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16, 0,
- 0, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 246, 15, 16,
- 0, 1, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0,
- 0, 0, 31, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68,
- 69, 70, 12, 2, 0, 0, 1, 0, 0, 0, 232, 0, 0, 0, 5,
- 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0,
- 216, 1, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, 2, 0, 0,
- 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 220, 0, 0, 0, 2,
- 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255,
- 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 225, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 115,
- 77, 97, 115, 107, 83, 97, 109, 112, 108, 101, 114, 0, 115, 83, 104,
- 97, 100, 111, 119, 83, 97, 109, 112, 108, 101, 114, 0, 116, 101, 120,
- 0, 109, 97, 115, 107, 0, 99, 98, 49, 0, 171, 171, 171, 225, 0,
- 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 160, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 0, 0,
- 48, 0, 0, 0, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 0,
- 0, 128, 1, 0, 0, 48, 0, 0, 0, 48, 0, 0, 0, 2, 0,
- 0, 0, 144, 1, 0, 0, 0, 0, 0, 0, 160, 1, 0, 0, 96,
- 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 172, 1, 0, 0,
- 0, 0, 0, 0, 188, 1, 0, 0, 144, 0, 0, 0, 16, 0, 0,
- 0, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 0, 0, 66, 108,
- 117, 114, 79, 102, 102, 115, 101, 116, 115, 72, 0, 171, 171, 171, 1,
- 0, 3, 0, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, 86, 0, 171, 171,
- 171, 1, 0, 3, 0, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 66, 108, 117, 114, 87, 101, 105, 103, 104, 116, 115, 0, 1,
- 0, 3, 0, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 83, 104, 97, 100, 111, 119, 67, 111, 108, 111, 114, 0, 1, 0, 3,
- 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 105,
- 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83,
- 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108,
- 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51,
- 56, 52, 0, 171, 171, 73, 83, 71, 78, 104, 0, 0, 0, 3, 0,
- 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12,
- 12, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0,
- 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83, 71,
- 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, 101,
- 116, 0, 171, 171, 255, 35, 1, 0, 0, 0, 0, 0, 83, 97, 109,
- 112, 108, 101, 84, 101, 120, 116, 84, 101, 120, 116, 117, 114, 101, 0,
- 85, 110, 109, 97, 115, 107, 101, 100, 0, 4, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 255, 255, 255, 255, 68, 4, 0,
- 0, 68, 88, 66, 67, 77, 85, 167, 240, 56, 56, 155, 78, 125, 96,
- 49, 253, 103, 100, 22, 62, 1, 0, 0, 0, 68, 4, 0, 0, 6,
- 0, 0, 0, 56, 0, 0, 0, 248, 0, 0, 0, 244, 1, 0, 0,
- 112, 2, 0, 0, 160, 3, 0, 0, 212, 3, 0, 0, 65, 111, 110,
- 57, 184, 0, 0, 0, 184, 0, 0, 0, 0, 2, 254, 255, 132, 0,
- 0, 0, 52, 0, 0, 0, 1, 0, 36, 0, 0, 0, 48, 0, 0,
- 0, 48, 0, 0, 0, 36, 0, 1, 0, 48, 0, 0, 0, 0, 0,
- 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 254,
- 255, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0, 0, 0, 0, 0,
- 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 5,
- 0, 0, 128, 0, 0, 15, 144, 4, 0, 0, 4, 0, 0, 3, 224,
- 0, 0, 228, 144, 2, 0, 238, 160, 2, 0, 228, 160, 4, 0, 0,
- 4, 0, 0, 12, 224, 0, 0, 20, 144, 3, 0, 180, 160, 3, 0,
- 20, 160, 4, 0, 0, 4, 0, 0, 3, 128, 0, 0, 228, 144, 1,
- 0, 238, 160, 1, 0, 228, 160, 2, 0, 0, 3, 0, 0, 3, 192,
- 0, 0, 228, 128, 0, 0, 228, 160, 1, 0, 0, 2, 0, 0, 12,
- 192, 4, 0, 68, 160, 255, 255, 0, 0, 83, 72, 68, 82, 244, 0,
- 0, 0, 64, 0, 1, 0, 61, 0, 0, 0, 89, 0, 0, 4, 70,
- 142, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0, 95, 0, 0, 3,
- 50, 16, 16, 0, 0, 0, 0, 0, 103, 0, 0, 4, 242, 32, 16,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 101, 0, 0, 3, 50, 32,
- 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 194, 32, 16, 0, 1,
- 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0, 0, 0, 0, 0,
- 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 54, 0, 0, 8, 194, 32, 16, 0, 0, 0, 0, 0, 2,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 128, 63, 50, 0, 0, 11, 50, 32, 16, 0, 1, 0, 0,
- 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 50, 0, 0, 11, 194, 32, 16, 0, 1, 0, 0, 0,
- 6, 20, 16, 0, 0, 0, 0, 0, 166, 142, 32, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 6, 132, 32, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0, 5,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70, 40,
- 1, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 0,
- 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0, 0, 246, 0, 0,
- 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 99, 98, 48, 0, 60, 0, 0, 0, 4, 0, 0, 0,
- 88, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 184, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 2, 0,
- 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, 16,
- 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0,
- 0, 0, 0, 0, 222, 0, 0, 0, 32, 0, 0, 0, 16, 0, 0,
- 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 236, 0,
- 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 196,
- 0, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101, 115, 99,
- 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0,
- 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 84,
- 101, 120, 116, 67, 111, 108, 111, 114, 0, 77, 105, 99, 114, 111, 115,
- 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104,
- 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54,
- 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 73,
- 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79, 83, 73, 84, 73,
- 79, 78, 0, 171, 171, 171, 79, 83, 71, 78, 104, 0, 0, 0, 3,
- 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 1, 0, 0, 0, 3, 12, 0, 0, 92, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0,
- 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110,
- 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 250, 46,
- 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 152, 4, 0, 0, 68, 88, 66, 67, 227, 84, 48, 176,
- 142, 231, 109, 63, 97, 30, 1, 57, 105, 137, 178, 120, 1, 0, 0,
- 0, 152, 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 4, 1,
- 0, 0, 224, 1, 0, 0, 92, 2, 0, 0, 220, 3, 0, 0, 76,
- 4, 0, 0, 65, 111, 110, 57, 196, 0, 0, 0, 196, 0, 0, 0,
- 0, 2, 255, 255, 144, 0, 0, 0, 52, 0, 0, 0, 1, 0, 40,
- 0, 0, 0, 52, 0, 0, 0, 52, 0, 1, 0, 36, 0, 0, 0,
- 52, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 2, 255, 255, 81, 0, 0, 5, 1, 0, 15, 160,
- 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 31, 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0,
- 0, 2, 0, 0, 0, 144, 0, 8, 15, 160, 1, 0, 0, 2, 0,
- 0, 7, 128, 0, 0, 228, 160, 4, 0, 0, 4, 0, 0, 15, 128,
- 0, 0, 36, 128, 1, 0, 64, 160, 1, 0, 21, 160, 1, 0, 0,
- 2, 0, 8, 15, 128, 0, 0, 228, 128, 66, 0, 0, 3, 0, 0,
- 15, 128, 0, 0, 228, 176, 0, 8, 228, 160, 5, 0, 0, 3, 0,
- 0, 15, 128, 0, 0, 70, 128, 0, 0, 255, 160, 1, 0, 0, 2,
- 1, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0, 0, 83, 72, 68,
- 82, 212, 0, 0, 0, 64, 0, 0, 0, 53, 0, 0, 0, 89, 0,
- 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 4, 0, 0, 0, 90,
- 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0, 88, 24, 0, 4,
- 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0,
- 3, 50, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32,
- 16, 0, 0, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 1,
- 0, 0, 0, 104, 0, 0, 2, 1, 0, 0, 0, 54, 0, 0, 6,
- 114, 32, 16, 0, 0, 0, 0, 0, 70, 130, 32, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 54, 0, 0, 5, 130, 32, 16, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 69, 0, 0, 9, 242,
- 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0,
- 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0,
- 0, 56, 0, 0, 8, 242, 32, 16, 0, 1, 0, 0, 0, 102, 4,
- 16, 0, 0, 0, 0, 0, 246, 143, 32, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, 0,
- 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, 70,
- 120, 1, 0, 0, 1, 0, 0, 0, 144, 0, 0, 0, 3, 0, 0,
- 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0, 70, 1,
- 0, 0, 124, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 133, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0,
- 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0,
- 0, 0, 12, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 115, 83, 97, 109, 112, 108, 101,
- 114, 0, 116, 101, 120, 0, 99, 98, 48, 0, 171, 171, 171, 137, 0,
- 0, 0, 4, 0, 0, 0, 168, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0,
- 16, 0, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0,
- 0, 36, 1, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0,
- 0, 0, 20, 1, 0, 0, 0, 0, 0, 0, 46, 1, 0, 0, 32,
- 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 20, 1, 0, 0,
- 0, 0, 0, 0, 60, 1, 0, 0, 48, 0, 0, 0, 16, 0, 0,
- 0, 2, 0, 0, 0, 20, 1, 0, 0, 0, 0, 0, 0, 81, 117,
- 97, 100, 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67,
- 111, 111, 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111,
- 111, 114, 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0,
- 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72,
- 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112,
- 105, 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49,
- 54, 51, 56, 52, 0, 73, 83, 71, 78, 104, 0, 0, 0, 3, 0,
- 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12,
- 0, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0,
- 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83, 71,
- 78, 68, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 56, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 15, 0, 0, 0, 56, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 15, 0, 0,
- 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171, 171, 86, 51,
- 1, 0, 0, 0, 0, 0, 77, 97, 115, 107, 101, 100, 0, 4, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 255, 255, 255,
- 255, 68, 4, 0, 0, 68, 88, 66, 67, 77, 85, 167, 240, 56, 56,
- 155, 78, 125, 96, 49, 253, 103, 100, 22, 62, 1, 0, 0, 0, 68,
- 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 248, 0, 0, 0,
- 244, 1, 0, 0, 112, 2, 0, 0, 160, 3, 0, 0, 212, 3, 0,
- 0, 65, 111, 110, 57, 184, 0, 0, 0, 184, 0, 0, 0, 0, 2,
- 254, 255, 132, 0, 0, 0, 52, 0, 0, 0, 1, 0, 36, 0, 0,
- 0, 48, 0, 0, 0, 48, 0, 0, 0, 36, 0, 1, 0, 48, 0,
- 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 2, 254, 255, 81, 0, 0, 5, 4, 0, 15, 160, 0, 0,
- 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 2, 5, 0, 0, 128, 0, 0, 15, 144, 4, 0, 0, 4,
- 0, 0, 3, 224, 0, 0, 228, 144, 2, 0, 238, 160, 2, 0, 228,
- 160, 4, 0, 0, 4, 0, 0, 12, 224, 0, 0, 20, 144, 3, 0,
- 180, 160, 3, 0, 20, 160, 4, 0, 0, 4, 0, 0, 3, 128, 0,
- 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, 0, 0, 3,
- 0, 0, 3, 192, 0, 0, 228, 128, 0, 0, 228, 160, 1, 0, 0,
- 2, 0, 0, 12, 192, 4, 0, 68, 160, 255, 255, 0, 0, 83, 72,
- 68, 82, 244, 0, 0, 0, 64, 0, 1, 0, 61, 0, 0, 0, 89,
- 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0, 0,
- 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101, 0,
- 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 194,
- 32, 16, 0, 1, 0, 0, 0, 50, 0, 0, 11, 50, 32, 16, 0,
- 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0, 0,
- 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 128, 63, 50, 0, 0, 11, 50, 32, 16,
- 0, 1, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138,
- 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 50, 0, 0, 11, 194, 32, 16, 0,
- 1, 0, 0, 0, 6, 20, 16, 0, 0, 0, 0, 0, 166, 142, 32,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 6, 132, 32, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116,
- 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
- 68, 69, 70, 40, 1, 0, 0, 1, 0, 0, 0, 64, 0, 0, 0,
- 1, 0, 0, 0, 28, 0, 0, 0, 0, 4, 254, 255, 0, 1, 0,
- 0, 246, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 60, 0, 0, 0,
- 4, 0, 0, 0, 88, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 212,
- 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0,
- 196, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 32, 0, 0,
- 0, 16, 0, 0, 0, 2, 0, 0, 0, 196, 0, 0, 0, 0, 0,
- 0, 0, 236, 0, 0, 0, 48, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 81, 117, 97, 100,
- 68, 101, 115, 99, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111,
- 114, 100, 115, 0, 77, 97, 115, 107, 84, 101, 120, 67, 111, 111, 114,
- 100, 115, 0, 84, 101, 120, 116, 67, 111, 108, 111, 114, 0, 77, 105,
- 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83,
- 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108,
- 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51,
- 56, 52, 0, 73, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0,
- 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79,
- 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, 83, 71, 78, 104,
- 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 12, 0, 0, 92,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105,
- 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171,
- 171, 171, 49, 56, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 140, 5, 0, 0, 68, 88, 66, 67,
- 233, 167, 4, 110, 60, 182, 197, 16, 114, 252, 67, 184, 217, 172, 169,
- 241, 1, 0, 0, 0, 140, 5, 0, 0, 6, 0, 0, 0, 56, 0,
- 0, 0, 64, 1, 0, 0, 132, 2, 0, 0, 0, 3, 0, 0, 208,
- 4, 0, 0, 64, 5, 0, 0, 65, 111, 110, 57, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 2, 255, 255, 200, 0, 0, 0, 56, 0, 0,
- 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0, 56, 0, 2, 0,
- 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 255, 255,
- 81, 0, 0, 5, 1, 0, 15, 160, 0, 0, 128, 63, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 2, 0, 0,
- 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0, 144, 0,
- 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1, 8, 15, 160,
- 1, 0, 0, 2, 0, 0, 7, 128, 0, 0, 228, 160, 4, 0, 0,
- 4, 0, 0, 15, 128, 0, 0, 36, 128, 1, 0, 64, 160, 1, 0,
- 21, 160, 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 1,
- 0, 0, 2, 0, 0, 3, 128, 0, 0, 235, 176, 66, 0, 0, 3,
- 1, 0, 15, 128, 0, 0, 228, 176, 0, 8, 228, 160, 66, 0, 0,
- 3, 0, 0, 15, 128, 0, 0, 228, 128, 1, 8, 228, 160, 5, 0,
- 0, 3, 1, 0, 15, 128, 1, 0, 70, 128, 0, 0, 255, 160, 5,
- 0, 0, 3, 0, 0, 15, 128, 0, 0, 255, 128, 1, 0, 228, 128,
- 1, 0, 0, 2, 1, 8, 15, 128, 0, 0, 228, 128, 255, 255, 0,
- 0, 83, 72, 68, 82, 60, 1, 0, 0, 64, 0, 0, 0, 79, 0,
- 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0, 0,
- 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24, 0,
- 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88, 24,
- 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98,
- 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0, 3,
- 194, 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16,
- 0, 0, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 1, 0,
- 0, 0, 104, 0, 0, 2, 2, 0, 0, 0, 54, 0, 0, 6, 114,
- 32, 16, 0, 0, 0, 0, 0, 70, 130, 32, 0, 0, 0, 0, 0,
- 3, 0, 0, 0, 54, 0, 0, 5, 130, 32, 16, 0, 0, 0, 0,
- 0, 1, 64, 0, 0, 0, 0, 128, 63, 69, 0, 0, 9, 242, 0,
- 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70,
- 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0,
- 56, 0, 0, 8, 242, 0, 16, 0, 0, 0, 0, 0, 102, 4, 16,
- 0, 0, 0, 0, 0, 246, 143, 32, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 230,
- 26, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0, 0, 0,
- 0, 96, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16,
- 0, 1, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 246, 15,
- 16, 0, 1, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116,
- 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
- 68, 69, 70, 200, 1, 0, 0, 1, 0, 0, 0, 224, 0, 0, 0,
- 5, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0,
- 0, 150, 1, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 2, 0,
- 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0,
- 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 214, 0, 0, 0,
- 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255,
- 255, 1, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 219, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 115, 83, 97, 109, 112, 108, 101, 114, 0, 115, 77, 97, 115, 107, 83,
- 97, 109, 112, 108, 101, 114, 0, 116, 101, 120, 0, 109, 97, 115, 107,
- 0, 99, 98, 48, 0, 171, 219, 0, 0, 0, 4, 0, 0, 0, 248,
- 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 1, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 100, 1, 0, 0, 0, 0, 0, 0, 116, 1, 0, 0, 16, 0,
- 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0,
- 0, 0, 0, 126, 1, 0, 0, 32, 0, 0, 0, 16, 0, 0, 0,
- 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 0, 140, 1, 0,
- 0, 48, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 100, 1,
- 0, 0, 0, 0, 0, 0, 81, 117, 97, 100, 68, 101, 115, 99, 0,
- 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 77,
- 97, 115, 107, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 84, 101,
- 120, 116, 67, 111, 108, 111, 114, 0, 77, 105, 99, 114, 111, 115, 111,
- 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97,
- 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54, 46,
- 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 73, 83,
- 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 3,
- 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 1, 0, 0, 0, 12, 12, 0, 0, 83, 86, 95, 80,
- 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82,
- 68, 0, 171, 171, 171, 79, 83, 71, 78, 68, 0, 0, 0, 2, 0,
- 0, 0, 8, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
- 56, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 1, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114,
- 103, 101, 116, 0, 171, 171, 141, 60, 1, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 255, 255, 255, 255, 0, 0, 0, 0, 46, 0, 0, 0, 18, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0,
- 93, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0,
- 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0,
- 65, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 65, 0,
- 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 160, 0, 0, 0,
- 0, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0,
- 0, 168, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181,
- 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 0,
- 0, 140, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 65,
- 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 218, 0, 0, 0, 112, 0, 0,
- 0, 0, 0, 0, 0, 7, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 3, 1, 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 61, 1, 0, 0, 33, 1, 0, 0, 0, 0, 0, 0, 48, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 1,
- 0, 0, 79, 1, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 1, 0, 0,
- 33, 1, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 1, 0, 0, 126, 1,
- 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 156, 1, 0, 0, 126, 1, 0, 0,
- 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 164, 1, 0, 0, 126, 1, 0, 0, 0, 0,
- 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 175, 1, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 6, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 179, 1, 0,
- 0, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 1, 0, 0, 33,
- 1, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 221, 1, 0, 0, 33, 1, 0,
- 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 228, 1, 0, 0, 126, 1, 0, 0, 0,
- 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 234, 1, 0, 0, 126, 1, 0, 0, 0, 0, 0,
- 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 247, 1, 0, 0, 126, 1, 0, 0, 0, 0, 0, 0, 72,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 40, 2, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 255, 255, 255,
- 255, 0, 0, 0, 0, 44, 2, 0, 0, 12, 2, 0, 0, 0, 0,
- 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 51, 2, 0, 0, 12,
- 2, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0,
- 97, 2, 0, 0, 69, 2, 0, 0, 0, 0, 0, 0, 255, 255, 255,
- 255, 4, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 106, 2, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 40, 2, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 118, 2, 0, 0, 47, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 130, 2, 0, 0, 0, 0, 0, 0, 142, 2,
- 0, 0, 69, 2, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 4,
- 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 154, 2, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 44, 2, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 166, 2, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 178, 2, 0, 0, 0, 0, 0, 0, 190, 2, 0, 0,
- 69, 2, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 4, 0, 0,
- 0, 45, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 203, 2,
- 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 40,
- 2, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 215, 2, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 227, 2, 0, 0, 0, 0, 0, 0, 239, 2, 0, 0, 69, 2,
- 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 4, 0, 0, 0, 45,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 254, 2, 0, 0,
- 55, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 40, 2, 0,
- 0, 46, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 3,
- 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 22,
- 3, 0, 0, 0, 0, 0, 0, 34, 3, 0, 0, 69, 2, 0, 0,
- 0, 0, 0, 0, 255, 255, 255, 255, 4, 0, 0, 0, 45, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 47, 3, 0, 0, 55, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 51, 2, 0, 0, 46,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 59, 3, 0, 0,
- 47, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 71, 3, 0,
- 0, 0, 0, 0, 0, 83, 3, 0, 0, 69, 2, 0, 0, 0, 0,
- 0, 0, 255, 255, 255, 255, 5, 0, 0, 0, 45, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 98, 3, 0, 0, 55, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 40, 2, 0, 0, 46, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 110, 3, 0, 0, 47, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 122, 3, 0, 0, 52,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 134, 3, 0, 0,
- 0, 0, 0, 0, 214, 3, 0, 0, 186, 3, 0, 0, 0, 0, 0,
- 0, 255, 255, 255, 255, 2, 0, 0, 0, 19, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 226, 3, 0, 0, 13, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 238, 3, 0, 0, 0, 0, 0, 0,
- 33, 4, 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 255, 255, 255,
- 255, 2, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 46, 4, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 58, 4, 0, 0, 0, 0, 0, 0, 70, 4, 0, 0,
- 5, 4, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 8, 0, 0,
- 0, 37, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 83, 4,
- 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 95,
- 4, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 107, 4, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 119, 4, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 131, 4, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 143, 4, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 155, 4, 0, 0, 44, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 167, 4, 0, 0, 0, 0, 0, 0, 179, 4,
- 0, 0, 5, 4, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 9,
- 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 190, 4, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 202, 4, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 214, 4, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 226, 4, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 238, 4, 0, 0, 41, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 250, 4, 0, 0, 42, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 6, 5, 0, 0, 43, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 18, 5, 0, 0, 44, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 30, 5, 0, 0, 0, 0, 0,
- 0, 42, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 56, 5,
- 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 214, 3, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 7, 0, 0, 0, 131, 9, 0, 0, 8, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 139, 9, 0, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 111, 12, 0, 0, 119,
- 12, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 56, 5, 0, 0,
- 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2, 0, 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 227, 16, 0, 0, 8, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 235, 16, 0, 0, 7, 0, 0, 0,
- 0, 0, 0, 0, 7, 0, 0, 0, 67, 30, 0, 0, 75, 30, 0,
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 56, 5, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 183, 34, 0, 0, 8, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 191, 34, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 39, 52, 0, 0, 47, 52, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 56, 5, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 156, 56, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 164, 56, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 140, 94, 0, 0, 148, 94, 0, 0, 6, 0, 0,
- 0, 0, 0, 0, 0, 169, 94, 0, 0, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 214,
- 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 222, 101, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 230, 101, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 214, 111, 0, 0, 222, 111, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0,
- 0, 17, 119, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 25, 119, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 233, 126, 0, 0, 241, 126, 0, 0, 4, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 42, 134, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 50, 134, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 38, 144, 0, 0, 46, 144, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 101, 151, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 109, 151, 0, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 65, 159, 0, 0, 73, 159, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 132, 166, 0, 0, 8, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 140, 166, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 132, 176, 0, 0, 140, 176, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 197, 183, 0, 0, 8, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 205, 183, 0, 0, 7, 0, 0, 0, 0,
- 0, 0, 0, 7, 0, 0, 0, 165, 191, 0, 0, 173, 191, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 169, 94, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 209, 198, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 217, 198, 0, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 53, 211, 0, 0, 241, 126, 0, 0, 4, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 77, 218, 0, 0, 8, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 85, 218, 0, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 181, 230, 0, 0, 73, 159, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 205, 237, 0, 0, 8, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 213, 237, 0, 0, 7, 0, 0, 0, 0,
- 0, 0, 0, 7, 0, 0, 0, 57, 250, 0, 0, 65, 250, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 56, 5, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 214, 3, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7,
- 0, 0, 0, 157, 254, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 165, 254, 0, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 137, 2, 1, 0, 145, 2, 1, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 56, 5, 0, 0, 7, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
- 214, 3, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 169, 2, 1, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 205, 2, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 33, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 33, 7, 1, 0, 8, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 41, 7, 1, 0, 7, 0, 0, 0, 0, 0,
- 0, 0, 7, 0, 0, 0, 33, 17, 1, 0, 41, 17, 1, 0, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 214, 3, 0, 0, 10, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 44, 17, 1, 0, 11, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 80, 17, 1, 0, 2, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 70, 4, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 7, 0, 0, 0, 164, 21, 1, 0, 8, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 172, 21, 1, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 104, 31, 1, 0, 112,
- 31, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 0, 214, 3, 0, 0, 10, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 115, 31, 1, 0, 11, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 151, 31, 1, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 70, 4, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 235, 35, 1,
- 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 243, 35,
- 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 167,
- 46, 1, 0, 175, 46, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0,
- 193, 46, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 214, 3, 0, 0, 10, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 202, 46, 1, 0, 11,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 238, 46, 1, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 179, 4, 0,
- 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 66, 51,
- 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 74,
- 51, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
- 242, 55, 1, 0, 250, 55, 1, 0, 7, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 214, 3,
- 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
- 56, 1, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 37, 56, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 179, 4, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0,
- 0, 0, 121, 60, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 129, 60, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0,
- 7, 0, 0, 0, 29, 66, 1, 0};
diff --git a/gfx/2d/ShadersD2D1.h b/gfx/2d/ShadersD2D1.h
@@ -1,1186 +0,0 @@
-#if 0
-//
-// Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
-//
-//
-// Buffer Definitions:
-//
-// cbuffer radialGradientConstants
-// {
-//
-// float3 diff; // Offset: 0 Size: 12
-// float2 center1; // Offset: 16 Size: 8
-// float A; // Offset: 24 Size: 4
-// float radius1; // Offset: 28 Size: 4
-// float sq_radius1; // Offset: 32 Size: 4
-// float repeat_correct; // Offset: 36 Size: 4
-// float allow_odd; // Offset: 40 Size: 4
-// float3x2 transform; // Offset: 48 Size: 28
-//
-// }
-//
-//
-// Resource Bindings:
-//
-// Name Type Format Dim Slot Elements
-// ------------------------------ ---------- ------- ----------- ---- --------
-// InputSampler sampler NA NA 0 1
-// GradientSampler sampler NA NA 1 1
-// InputTexture texture float4 2d 0 1
-// GradientTexture texture float4 2d 1 1
-// radialGradientConstants cbuffer NA NA 0 1
-//
-//
-//
-// Input signature:
-//
-// Name Index Mask Register SysValue Format Used
-// -------------------- ----- ------ -------- -------- ------- ------
-// SV_POSITION 0 xyzw 0 POS float
-// SCENE_POSITION 0 xyzw 1 NONE float xy
-// TEXCOORD 0 xyzw 2 NONE float xy
-//
-//
-// Output signature:
-//
-// Name Index Mask Register SysValue Format Used
-// -------------------- ----- ------ -------- -------- ------- ------
-// SV_Target 0 xyzw 0 TARGET float xyzw
-//
-//
-// Constant buffer to DX9 shader constant mappings:
-//
-// Target Reg Buffer Start Reg # of Regs Data Conversion
-// ---------- ------- --------- --------- ----------------------
-// c0 cb0 0 5 ( FLT, FLT, FLT, FLT)
-//
-//
-// Sampler/Resource to DX9 shader sampler mappings:
-//
-// Target Sampler Source Sampler Source Resource
-// -------------- --------------- ----------------
-// s0 s0 t0
-// s1 s1 t1
-//
-//
-// Level9 shader bytecode:
-//
- ps_2_x
- def c5, 0.5, 1, 0, 0
- def c6, 1, -1, 0, -0
- dcl t0
- dcl t1
- dcl_2d s0
- dcl_2d s1
- dp2add r0.x, t0, c3, c3.z
- dp2add r0.y, t0, c4, c4.z
- add r0.xy, r0, -c1
- dp2add r0.w, r0, r0, -c2.x
- mul r0.w, r0.w, c1.z
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- mad r0.y, r0.x, r0.x, -r0.w
- abs r0.z, r0.y
- cmp r0.y, r0.y, c5.y, c5.z
- rsq r0.z, r0.z
- rcp r1.x, r0.z
- mov r1.yz, -r1.x
- add r0.xzw, r0.x, r1.xyyz
- rcp r1.x, c1.z
- mul r0.xzw, r0, r1.x
- mov r1.w, c1.w
- mad r1.xyz, r0.xzww, c0.z, r1.w
- cmp r1.w, r1.x, r0.x, r0.w
- cmp r0.xzw, r1.xyyz, c6.xyxy, c6.zyzw
- frc r1.x, r1.w
- add r1.x, -r1.x, r1.w
- mul r1.y, r1.x, c5.x
- abs r1.y, r1.y
- frc r1.y, r1.y
- cmp r1.y, r1.x, r1.y, -r1.y
- add r1.x, -r1.x, r1.w
- add r1.y, r1.y, r1.y
- abs r1.y, r1.y
- mul r1.y, r1.y, c2.z
- frc r1.z, -r1.w
- lrp r2.w, r1.y, r1.z, r1.x
- lrp r3.x, c2.y, r2.w, r1.w
- mov r3.y, c5.x
- texld r1, t1, s0
- texld r2, r3, s1
- mul r2.xyz, r2.w, r2
- mul r1, r1, r2
- add r0.w, r0.w, r0.x
- cmp r0.x, r0.w, r0.x, r0.z
- mul r1, r0.x, r1
- mul r0, r0.y, r1
- mov oC0, r0
-
-// approximately 46 instruction slots used (2 texture, 44 arithmetic)
-ps_4_0
-dcl_constantbuffer cb0[5], immediateIndexed
-dcl_sampler s0, mode_default
-dcl_sampler s1, mode_default
-dcl_resource_texture2d (float,float,float,float) t0
-dcl_resource_texture2d (float,float,float,float) t1
-dcl_input_ps linear v1.xy
-dcl_input_ps linear v2.xy
-dcl_output o0.xyzw
-dcl_temps 3
-dp2 r0.x, v1.xyxx, cb0[3].xyxx
-add r0.x, r0.x, cb0[3].z
-dp2 r0.z, v1.xyxx, cb0[4].xyxx
-add r0.y, r0.z, cb0[4].z
-add r0.xy, r0.xyxx, -cb0[1].xyxx
-dp2 r0.w, r0.xyxx, r0.xyxx
-add r0.w, r0.w, -cb0[2].x
-mul r0.w, r0.w, cb0[1].z
-mov r0.z, cb0[1].w
-dp3 r0.x, r0.xyzx, cb0[0].xyzx
-mad r0.y, r0.x, r0.x, -r0.w
-sqrt r1.x, |r0.y|
-ge r0.y, r0.y, l(0.000000)
-and r0.y, r0.y, l(0x3f800000)
-mov r1.y, -r1.x
-add r0.xz, r0.xxxx, r1.xxyx
-div r0.xz, r0.xxzx, cb0[1].zzzz
-add r0.w, -r0.z, r0.x
-mul r1.xy, r0.xzxx, cb0[0].zzzz
-ge r1.xy, r1.xyxx, -cb0[1].wwww
-and r1.xy, r1.xyxx, l(0x3f800000, 0x3f800000, 0, 0)
-mad r0.x, r1.x, r0.w, r0.z
-max r0.z, r1.y, r1.x
-ge r0.z, l(0.000000), r0.z
-movc r0.z, r0.z, l(-0.000000), l(1.000000)
-round_pi r0.w, r0.x
-add r0.w, -r0.x, r0.w
-round_ni r1.x, r0.x
-mul r1.y, r1.x, l(0.500000)
-add r1.x, r0.x, -r1.x
-ge r1.z, r1.y, -r1.y
-frc r1.y, |r1.y|
-movc r1.y, r1.z, r1.y, -r1.y
-add r1.y, r1.y, r1.y
-mul r1.z, |r1.y|, cb0[2].z
-mad r1.y, -|r1.y|, cb0[2].z, l(1.000000)
-mul r0.w, r0.w, r1.z
-mad r0.w, r1.x, r1.y, r0.w
-mul r0.w, r0.w, cb0[2].y
-add r1.x, l(1.000000), -cb0[2].y
-mad r1.x, r0.x, r1.x, r0.w
-mov r1.y, l(0.500000)
-sample r1.xyzw, r1.xyxx, t1.xyzw, s1
-mul r1.xyz, r1.wwww, r1.xyzx
-sample r2.xyzw, v2.xyxx, t0.xyzw, s0
-mul r1.xyzw, r1.xyzw, r2.xyzw
-mul r1.xyzw, r0.zzzz, r1.xyzw
-mul o0.xyzw, r0.yyyy, r1.xyzw
-ret
-// Approximately 49 instruction slots used
-#endif
-
-const BYTE SampleRadialGradientPS[] = {
- 68, 88, 66, 67, 221, 203, 207, 240, 164, 242, 31, 220, 34, 19, 29,
- 61, 18, 184, 230, 185, 1, 0, 0, 0, 196, 13, 0, 0, 6, 0,
- 0, 0, 56, 0, 0, 0, 136, 3, 0, 0, 232, 9, 0, 0, 100,
- 10, 0, 0, 20, 13, 0, 0, 144, 13, 0, 0, 65, 111, 110, 57,
- 72, 3, 0, 0, 72, 3, 0, 0, 0, 2, 255, 255, 16, 3, 0,
- 0, 56, 0, 0, 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0,
- 56, 0, 2, 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1,
- 1, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 255, 255, 81, 0, 0, 5, 5, 0, 15, 160, 0, 0, 0,
- 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0,
- 0, 5, 6, 0, 15, 160, 0, 0, 128, 63, 0, 0, 128, 191, 0,
- 0, 0, 0, 0, 0, 0, 128, 31, 0, 0, 2, 0, 0, 0, 128,
- 0, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0, 128, 1, 0, 15,
- 176, 31, 0, 0, 2, 0, 0, 0, 144, 0, 8, 15, 160, 31, 0,
- 0, 2, 0, 0, 0, 144, 1, 8, 15, 160, 90, 0, 0, 4, 0,
- 0, 1, 128, 0, 0, 228, 176, 3, 0, 228, 160, 3, 0, 170, 160,
- 90, 0, 0, 4, 0, 0, 2, 128, 0, 0, 228, 176, 4, 0, 228,
- 160, 4, 0, 170, 160, 2, 0, 0, 3, 0, 0, 3, 128, 0, 0,
- 228, 128, 1, 0, 228, 161, 90, 0, 0, 4, 0, 0, 8, 128, 0,
- 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 161, 5, 0, 0, 3,
- 0, 0, 8, 128, 0, 0, 255, 128, 1, 0, 170, 160, 1, 0, 0,
- 2, 0, 0, 4, 128, 1, 0, 255, 160, 8, 0, 0, 3, 0, 0,
- 1, 128, 0, 0, 228, 128, 0, 0, 228, 160, 4, 0, 0, 4, 0,
- 0, 2, 128, 0, 0, 0, 128, 0, 0, 0, 128, 0, 0, 255, 129,
- 35, 0, 0, 2, 0, 0, 4, 128, 0, 0, 85, 128, 88, 0, 0,
- 4, 0, 0, 2, 128, 0, 0, 85, 128, 5, 0, 85, 160, 5, 0,
- 170, 160, 7, 0, 0, 2, 0, 0, 4, 128, 0, 0, 170, 128, 6,
- 0, 0, 2, 1, 0, 1, 128, 0, 0, 170, 128, 1, 0, 0, 2,
- 1, 0, 6, 128, 1, 0, 0, 129, 2, 0, 0, 3, 0, 0, 13,
- 128, 0, 0, 0, 128, 1, 0, 148, 128, 6, 0, 0, 2, 1, 0,
- 1, 128, 1, 0, 170, 160, 5, 0, 0, 3, 0, 0, 13, 128, 0,
- 0, 228, 128, 1, 0, 0, 128, 1, 0, 0, 2, 1, 0, 8, 128,
- 1, 0, 255, 160, 4, 0, 0, 4, 1, 0, 7, 128, 0, 0, 248,
- 128, 0, 0, 170, 160, 1, 0, 255, 128, 88, 0, 0, 4, 1, 0,
- 8, 128, 1, 0, 0, 128, 0, 0, 0, 128, 0, 0, 255, 128, 88,
- 0, 0, 4, 0, 0, 13, 128, 1, 0, 148, 128, 6, 0, 68, 160,
- 6, 0, 230, 160, 19, 0, 0, 2, 1, 0, 1, 128, 1, 0, 255,
- 128, 2, 0, 0, 3, 1, 0, 1, 128, 1, 0, 0, 129, 1, 0,
- 255, 128, 5, 0, 0, 3, 1, 0, 2, 128, 1, 0, 0, 128, 5,
- 0, 0, 160, 35, 0, 0, 2, 1, 0, 2, 128, 1, 0, 85, 128,
- 19, 0, 0, 2, 1, 0, 2, 128, 1, 0, 85, 128, 88, 0, 0,
- 4, 1, 0, 2, 128, 1, 0, 0, 128, 1, 0, 85, 128, 1, 0,
- 85, 129, 2, 0, 0, 3, 1, 0, 1, 128, 1, 0, 0, 129, 1,
- 0, 255, 128, 2, 0, 0, 3, 1, 0, 2, 128, 1, 0, 85, 128,
- 1, 0, 85, 128, 35, 0, 0, 2, 1, 0, 2, 128, 1, 0, 85,
- 128, 5, 0, 0, 3, 1, 0, 2, 128, 1, 0, 85, 128, 2, 0,
- 170, 160, 19, 0, 0, 2, 1, 0, 4, 128, 1, 0, 255, 129, 18,
- 0, 0, 4, 2, 0, 8, 128, 1, 0, 85, 128, 1, 0, 170, 128,
- 1, 0, 0, 128, 18, 0, 0, 4, 3, 0, 1, 128, 2, 0, 85,
- 160, 2, 0, 255, 128, 1, 0, 255, 128, 1, 0, 0, 2, 3, 0,
- 2, 128, 5, 0, 0, 160, 66, 0, 0, 3, 1, 0, 15, 128, 1,
- 0, 228, 176, 0, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128,
- 3, 0, 228, 128, 1, 8, 228, 160, 5, 0, 0, 3, 2, 0, 7,
- 128, 2, 0, 255, 128, 2, 0, 228, 128, 5, 0, 0, 3, 1, 0,
- 15, 128, 1, 0, 228, 128, 2, 0, 228, 128, 2, 0, 0, 3, 0,
- 0, 8, 128, 0, 0, 255, 128, 0, 0, 0, 128, 88, 0, 0, 4,
- 0, 0, 1, 128, 0, 0, 255, 128, 0, 0, 0, 128, 0, 0, 170,
- 128, 5, 0, 0, 3, 1, 0, 15, 128, 0, 0, 0, 128, 1, 0,
- 228, 128, 5, 0, 0, 3, 0, 0, 15, 128, 0, 0, 85, 128, 1,
- 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128,
- 255, 255, 0, 0, 83, 72, 68, 82, 88, 6, 0, 0, 64, 0, 0,
- 0, 150, 1, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0,
- 0, 0, 5, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0,
- 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0,
- 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0,
- 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85,
- 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98,
- 16, 0, 3, 50, 16, 16, 0, 2, 0, 0, 0, 101, 0, 0, 3,
- 242, 32, 16, 0, 0, 0, 0, 0, 104, 0, 0, 2, 3, 0, 0,
- 0, 15, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 70, 16,
- 16, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 15, 0, 0, 8, 66, 0, 16, 0, 0, 0,
- 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 8, 34, 0, 16, 0,
- 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 9, 50, 0,
- 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 70,
- 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 15, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16,
- 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 0, 0,
- 0, 9, 130, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0,
- 0, 0, 0, 10, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 56, 0, 0, 8, 130, 0, 16, 0, 0, 0, 0,
- 0, 58, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 54, 0, 0, 6, 66, 0, 16, 0, 0,
- 0, 0, 0, 58, 128, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 16, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 70, 2, 16,
- 0, 0, 0, 0, 0, 70, 130, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 50, 0, 0, 10, 34, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0,
- 58, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0,
- 6, 18, 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 128, 129, 0,
- 0, 0, 0, 0, 0, 0, 29, 0, 0, 7, 34, 0, 16, 0, 0,
- 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 7, 34, 0, 16, 0, 0, 0, 0,
- 0, 26, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0,
- 128, 63, 54, 0, 0, 6, 34, 0, 16, 0, 1, 0, 0, 0, 10,
- 0, 16, 128, 65, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7,
- 82, 0, 16, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0, 0,
- 0, 6, 1, 16, 0, 1, 0, 0, 0, 14, 0, 0, 8, 82, 0,
- 16, 0, 0, 0, 0, 0, 6, 2, 16, 0, 0, 0, 0, 0, 166,
- 138, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8,
- 130, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 56, 0,
- 0, 8, 50, 0, 16, 0, 1, 0, 0, 0, 134, 0, 16, 0, 0,
- 0, 0, 0, 166, 138, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 29, 0, 0, 9, 50, 0, 16, 0, 1, 0, 0, 0, 70, 0, 16,
- 0, 1, 0, 0, 0, 246, 143, 32, 128, 65, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0, 10, 50, 0, 16, 0, 1,
- 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 2, 64, 0, 0,
- 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0,
- 0, 50, 0, 0, 9, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0,
- 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 42,
- 0, 16, 0, 0, 0, 0, 0, 52, 0, 0, 7, 66, 0, 16, 0,
- 0, 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16,
- 0, 1, 0, 0, 0, 29, 0, 0, 7, 66, 0, 16, 0, 0, 0,
- 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0,
- 0, 0, 0, 55, 0, 0, 9, 66, 0, 16, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 128, 1, 64, 0, 0, 0, 0, 128, 63, 66, 0, 0, 5, 130, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 130, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0,
- 0, 65, 0, 0, 5, 18, 0, 16, 0, 1, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 34, 0, 16, 0, 1,
- 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 8, 18, 0, 16, 0, 1, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 128, 65, 0,
- 0, 0, 1, 0, 0, 0, 29, 0, 0, 8, 66, 0, 16, 0, 1,
- 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 128,
- 65, 0, 0, 0, 1, 0, 0, 0, 26, 0, 0, 6, 34, 0, 16,
- 0, 1, 0, 0, 0, 26, 0, 16, 128, 129, 0, 0, 0, 1, 0,
- 0, 0, 55, 0, 0, 10, 34, 0, 16, 0, 1, 0, 0, 0, 42,
- 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0,
- 26, 0, 16, 128, 65, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 7, 34, 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 0, 1, 0,
- 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 56, 0, 0, 9, 66,
- 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 128, 129, 0, 0, 0,
- 1, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 50, 0, 0, 11, 34, 0, 16, 0, 1, 0, 0, 0, 26, 0,
- 16, 128, 193, 0, 0, 0, 1, 0, 0, 0, 42, 128, 32, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63,
- 56, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16,
- 0, 0, 0, 0, 0, 42, 0, 16, 0, 1, 0, 0, 0, 50, 0,
- 0, 9, 130, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1,
- 0, 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0,
- 0, 0, 0, 0, 56, 0, 0, 8, 130, 0, 16, 0, 0, 0, 0,
- 0, 58, 0, 16, 0, 0, 0, 0, 0, 26, 128, 32, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0, 0, 9, 18, 0, 16, 0, 1,
- 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 26, 128, 32, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 50, 0, 0,
- 9, 18, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0,
- 0, 0, 0, 54, 0, 0, 5, 34, 0, 16, 0, 1, 0, 0, 0,
- 1, 64, 0, 0, 0, 0, 0, 63, 69, 0, 0, 9, 242, 0, 16,
- 0, 1, 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 70, 126,
- 16, 0, 1, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 56,
- 0, 0, 7, 114, 0, 16, 0, 1, 0, 0, 0, 246, 15, 16, 0,
- 1, 0, 0, 0, 70, 2, 16, 0, 1, 0, 0, 0, 69, 0, 0,
- 9, 242, 0, 16, 0, 2, 0, 0, 0, 70, 16, 16, 0, 2, 0,
- 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0,
- 0, 0, 0, 56, 0, 0, 7, 242, 0, 16, 0, 1, 0, 0, 0,
- 70, 14, 16, 0, 1, 0, 0, 0, 70, 14, 16, 0, 2, 0, 0,
- 0, 56, 0, 0, 7, 242, 0, 16, 0, 1, 0, 0, 0, 166, 10,
- 16, 0, 0, 0, 0, 0, 70, 14, 16, 0, 1, 0, 0, 0, 56,
- 0, 0, 7, 242, 32, 16, 0, 0, 0, 0, 0, 86, 5, 16, 0,
- 0, 0, 0, 0, 70, 14, 16, 0, 1, 0, 0, 0, 62, 0, 0,
- 1, 83, 84, 65, 84, 116, 0, 0, 0, 49, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 40, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 82, 68, 69, 70, 168, 2, 0, 0, 1, 0,
- 0, 0, 16, 1, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0,
- 4, 255, 255, 0, 1, 0, 0, 116, 2, 0, 0, 188, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 201, 0,
- 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
- 217, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0,
- 0, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0,
- 0, 0, 230, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4,
- 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 1, 0, 0, 0,
- 13, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 73, 110, 112, 117, 116, 83, 97, 109, 112,
- 108, 101, 114, 0, 71, 114, 97, 100, 105, 101, 110, 116, 83, 97, 109,
- 112, 108, 101, 114, 0, 73, 110, 112, 117, 116, 84, 101, 120, 116, 117,
- 114, 101, 0, 71, 114, 97, 100, 105, 101, 110, 116, 84, 101, 120, 116,
- 117, 114, 101, 0, 114, 97, 100, 105, 97, 108, 71, 114, 97, 100, 105,
- 101, 110, 116, 67, 111, 110, 115, 116, 97, 110, 116, 115, 0, 171, 171,
- 246, 0, 0, 0, 8, 0, 0, 0, 40, 1, 0, 0, 80, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0,
- 0, 0, 12, 0, 0, 0, 2, 0, 0, 0, 240, 1, 0, 0, 0,
- 0, 0, 0, 0, 2, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0,
- 2, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 24, 2, 0,
- 0, 24, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 28, 2,
- 0, 0, 0, 0, 0, 0, 44, 2, 0, 0, 28, 0, 0, 0, 4,
- 0, 0, 0, 2, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0,
- 52, 2, 0, 0, 32, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0,
- 0, 28, 2, 0, 0, 0, 0, 0, 0, 63, 2, 0, 0, 36, 0,
- 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 28, 2, 0, 0, 0,
- 0, 0, 0, 78, 2, 0, 0, 40, 0, 0, 0, 4, 0, 0, 0,
- 2, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 88, 2, 0,
- 0, 48, 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, 100, 2,
- 0, 0, 0, 0, 0, 0, 100, 105, 102, 102, 0, 171, 171, 171, 1,
- 0, 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 99, 101, 110, 116, 101, 114, 49, 0, 1, 0, 3, 0, 1, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 171, 171, 0, 0,
- 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114,
- 97, 100, 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100, 105, 117,
- 115, 49, 0, 114, 101, 112, 101, 97, 116, 95, 99, 111, 114, 114, 101,
- 99, 116, 0, 97, 108, 108, 111, 119, 95, 111, 100, 100, 0, 116, 114,
- 97, 110, 115, 102, 111, 114, 109, 0, 171, 171, 3, 0, 3, 0, 3,
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 105, 99, 114,
- 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32,
- 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114,
- 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52,
- 0, 171, 171, 73, 83, 71, 78, 116, 0, 0, 0, 3, 0, 0, 0,
- 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1,
- 0, 0, 0, 15, 3, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 15, 3, 0,
- 0, 83, 86, 95, 80, 79, 83, 73, 84, 73, 79, 78, 0, 83, 67,
- 69, 78, 69, 95, 80, 79, 83, 73, 84, 73, 79, 78, 0, 84, 69,
- 88, 67, 79, 79, 82, 68, 0, 79, 83, 71, 78, 44, 0, 0, 0,
- 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0,
- 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171, 171};
-#if 0
-//
-// Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
-//
-//
-// Buffer Definitions:
-//
-// cbuffer radialGradientConstants
-// {
-//
-// float3 diff; // Offset: 0 Size: 12
-// float2 center1; // Offset: 16 Size: 8
-// float A; // Offset: 24 Size: 4 [unused]
-// float radius1; // Offset: 28 Size: 4
-// float sq_radius1; // Offset: 32 Size: 4 [unused]
-// float repeat_correct; // Offset: 36 Size: 4
-// float allow_odd; // Offset: 40 Size: 4
-// float3x2 transform; // Offset: 48 Size: 28
-//
-// }
-//
-//
-// Resource Bindings:
-//
-// Name Type Format Dim Slot Elements
-// ------------------------------ ---------- ------- ----------- ---- --------
-// InputSampler sampler NA NA 0 1
-// GradientSampler sampler NA NA 1 1
-// InputTexture texture float4 2d 0 1
-// GradientTexture texture float4 2d 1 1
-// radialGradientConstants cbuffer NA NA 0 1
-//
-//
-//
-// Input signature:
-//
-// Name Index Mask Register SysValue Format Used
-// -------------------- ----- ------ -------- -------- ------- ------
-// SV_POSITION 0 xyzw 0 POS float
-// SCENE_POSITION 0 xyzw 1 NONE float xy
-// TEXCOORD 0 xyzw 2 NONE float xy
-//
-//
-// Output signature:
-//
-// Name Index Mask Register SysValue Format Used
-// -------------------- ----- ------ -------- -------- ------- ------
-// SV_Target 0 xyzw 0 TARGET float xyzw
-//
-//
-// Constant buffer to DX9 shader constant mappings:
-//
-// Target Reg Buffer Start Reg # of Regs Data Conversion
-// ---------- ------- --------- --------- ----------------------
-// c0 cb0 0 5 ( FLT, FLT, FLT, FLT)
-//
-//
-// Sampler/Resource to DX9 shader sampler mappings:
-//
-// Target Sampler Source Sampler Source Resource
-// -------------- --------------- ----------------
-// s0 s0 t0
-// s1 s1 t1
-//
-//
-// Level9 shader bytecode:
-//
- ps_2_x
- def c5, 0.5, -0, 1, 0
- dcl t0
- dcl t1
- dcl_2d s0
- dcl_2d s1
- dp2add r0.x, t0, c3, c3.z
- dp2add r0.y, t0, c4, c4.z
- add r0.xy, r0, -c1
- mul r0.w, c1.w, c1.w
- dp2add r0.w, r0, r0, -r0.w
- mul r0.w, r0.w, c5.x
- mov r0.z, c1.w
- dp3 r0.x, r0, c0
- rcp r0.x, r0.x
- mul r0.y, r0.x, r0.w
- frc r0.z, r0.y
- add r0.z, -r0.z, r0.y
- mul r1.w, r0.z, c5.x
- abs r1.x, r1.w
- frc r1.x, r1.x
- cmp r1.x, r0.z, r1.x, -r1.x
- mad r0.x, r0.w, r0.x, -r0.z
- add r0.z, r1.x, r1.x
- abs r0.z, r0.z
- mul r0.z, r0.z, c2.z
- frc r0.w, -r0.y
- lrp r1.x, r0.z, r0.w, r0.x
- lrp r2.x, c2.y, r1.x, r0.y
- mov r0.w, c1.w
- mad r0.x, r0.y, -c0.z, -r0.w
- cmp r0.x, r0.x, c5.y, c5.z
- mov r2.y, c5.x
- texld r1, t1, s0
- texld r2, r2, s1
- mul r2.xyz, r2.w, r2
- mul r1, r1, r2
- mul r0, r0.x, r1
- mov oC0, r0
-
-// approximately 36 instruction slots used (2 texture, 34 arithmetic)
-ps_4_0
-dcl_constantbuffer cb0[5], immediateIndexed
-dcl_sampler s0, mode_default
-dcl_sampler s1, mode_default
-dcl_resource_texture2d (float,float,float,float) t0
-dcl_resource_texture2d (float,float,float,float) t1
-dcl_input_ps linear v1.xy
-dcl_input_ps linear v2.xy
-dcl_output o0.xyzw
-dcl_temps 3
-dp2 r0.x, v1.xyxx, cb0[3].xyxx
-add r0.x, r0.x, cb0[3].z
-dp2 r0.z, v1.xyxx, cb0[4].xyxx
-add r0.y, r0.z, cb0[4].z
-add r0.xy, r0.xyxx, -cb0[1].xyxx
-dp2 r0.w, r0.xyxx, r0.xyxx
-mad r0.w, -cb0[1].w, cb0[1].w, r0.w
-mul r0.w, r0.w, l(0.500000)
-mov r0.z, cb0[1].w
-dp3 r0.x, r0.xyzx, cb0[0].xyzx
-div r0.x, r0.w, r0.x
-round_pi r0.y, r0.x
-round_ni r0.z, r0.x
-mul r0.w, r0.z, l(0.500000)
-add r0.yz, -r0.xxzx, r0.yyxy
-ge r1.x, r0.w, -r0.w
-frc r0.w, |r0.w|
-movc r0.w, r1.x, r0.w, -r0.w
-add r0.w, r0.w, r0.w
-mul r1.x, |r0.w|, cb0[2].z
-mad r0.w, -|r0.w|, cb0[2].z, l(1.000000)
-mul r0.y, r0.y, r1.x
-mad r0.y, r0.z, r0.w, r0.y
-mul r0.y, r0.y, cb0[2].y
-add r0.z, l(1.000000), -cb0[2].y
-mad r1.x, r0.x, r0.z, r0.y
-mul r0.x, r0.x, cb0[0].z
-ge r0.x, -cb0[1].w, r0.x
-movc r0.x, r0.x, l(-0.000000), l(1.000000)
-mov r1.y, l(0.500000)
-sample r1.xyzw, r1.xyxx, t1.xyzw, s1
-mul r1.xyz, r1.wwww, r1.xyzx
-sample r2.xyzw, v2.xyxx, t0.xyzw, s0
-mul r1.xyzw, r1.xyzw, r2.xyzw
-mul o0.xyzw, r0.xxxx, r1.xyzw
-ret
-// Approximately 36 instruction slots used
-#endif
-
-const BYTE SampleRadialGradientA0PS[] = {
- 68, 88, 66, 67, 251, 98, 227, 203, 98, 180, 0, 199, 88, 100, 39,
- 81, 223, 130, 11, 15, 1, 0, 0, 0, 136, 11, 0, 0, 6, 0,
- 0, 0, 56, 0, 0, 0, 212, 2, 0, 0, 172, 7, 0, 0, 40,
- 8, 0, 0, 216, 10, 0, 0, 84, 11, 0, 0, 65, 111, 110, 57,
- 148, 2, 0, 0, 148, 2, 0, 0, 0, 2, 255, 255, 92, 2, 0,
- 0, 56, 0, 0, 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0,
- 56, 0, 2, 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1,
- 1, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 255, 255, 81, 0, 0, 5, 5, 0, 15, 160, 0, 0, 0,
- 63, 0, 0, 0, 128, 0, 0, 128, 63, 0, 0, 0, 0, 31, 0,
- 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0, 0, 2, 0,
- 0, 0, 128, 1, 0, 15, 176, 31, 0, 0, 2, 0, 0, 0, 144,
- 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144, 1, 8, 15,
- 160, 90, 0, 0, 4, 0, 0, 1, 128, 0, 0, 228, 176, 3, 0,
- 228, 160, 3, 0, 170, 160, 90, 0, 0, 4, 0, 0, 2, 128, 0,
- 0, 228, 176, 4, 0, 228, 160, 4, 0, 170, 160, 2, 0, 0, 3,
- 0, 0, 3, 128, 0, 0, 228, 128, 1, 0, 228, 161, 5, 0, 0,
- 3, 0, 0, 8, 128, 1, 0, 255, 160, 1, 0, 255, 160, 90, 0,
- 0, 4, 0, 0, 8, 128, 0, 0, 228, 128, 0, 0, 228, 128, 0,
- 0, 255, 129, 5, 0, 0, 3, 0, 0, 8, 128, 0, 0, 255, 128,
- 5, 0, 0, 160, 1, 0, 0, 2, 0, 0, 4, 128, 1, 0, 255,
- 160, 8, 0, 0, 3, 0, 0, 1, 128, 0, 0, 228, 128, 0, 0,
- 228, 160, 6, 0, 0, 2, 0, 0, 1, 128, 0, 0, 0, 128, 5,
- 0, 0, 3, 0, 0, 2, 128, 0, 0, 0, 128, 0, 0, 255, 128,
- 19, 0, 0, 2, 0, 0, 4, 128, 0, 0, 85, 128, 2, 0, 0,
- 3, 0, 0, 4, 128, 0, 0, 170, 129, 0, 0, 85, 128, 5, 0,
- 0, 3, 1, 0, 8, 128, 0, 0, 170, 128, 5, 0, 0, 160, 35,
- 0, 0, 2, 1, 0, 1, 128, 1, 0, 255, 128, 19, 0, 0, 2,
- 1, 0, 1, 128, 1, 0, 0, 128, 88, 0, 0, 4, 1, 0, 1,
- 128, 0, 0, 170, 128, 1, 0, 0, 128, 1, 0, 0, 129, 4, 0,
- 0, 4, 0, 0, 1, 128, 0, 0, 255, 128, 0, 0, 0, 128, 0,
- 0, 170, 129, 2, 0, 0, 3, 0, 0, 4, 128, 1, 0, 0, 128,
- 1, 0, 0, 128, 35, 0, 0, 2, 0, 0, 4, 128, 0, 0, 170,
- 128, 5, 0, 0, 3, 0, 0, 4, 128, 0, 0, 170, 128, 2, 0,
- 170, 160, 19, 0, 0, 2, 0, 0, 8, 128, 0, 0, 85, 129, 18,
- 0, 0, 4, 1, 0, 1, 128, 0, 0, 170, 128, 0, 0, 255, 128,
- 0, 0, 0, 128, 18, 0, 0, 4, 2, 0, 1, 128, 2, 0, 85,
- 160, 1, 0, 0, 128, 0, 0, 85, 128, 1, 0, 0, 2, 0, 0,
- 8, 128, 1, 0, 255, 160, 4, 0, 0, 4, 0, 0, 1, 128, 0,
- 0, 85, 128, 0, 0, 170, 161, 0, 0, 255, 129, 88, 0, 0, 4,
- 0, 0, 1, 128, 0, 0, 0, 128, 5, 0, 85, 160, 5, 0, 170,
- 160, 1, 0, 0, 2, 2, 0, 2, 128, 5, 0, 0, 160, 66, 0,
- 0, 3, 1, 0, 15, 128, 1, 0, 228, 176, 0, 8, 228, 160, 66,
- 0, 0, 3, 2, 0, 15, 128, 2, 0, 228, 128, 1, 8, 228, 160,
- 5, 0, 0, 3, 2, 0, 7, 128, 2, 0, 255, 128, 2, 0, 228,
- 128, 5, 0, 0, 3, 1, 0, 15, 128, 1, 0, 228, 128, 2, 0,
- 228, 128, 5, 0, 0, 3, 0, 0, 15, 128, 0, 0, 0, 128, 1,
- 0, 228, 128, 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128,
- 255, 255, 0, 0, 83, 72, 68, 82, 208, 4, 0, 0, 64, 0, 0,
- 0, 52, 1, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0,
- 0, 0, 5, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0,
- 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0,
- 88, 24, 0, 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0,
- 0, 88, 24, 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85,
- 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98,
- 16, 0, 3, 50, 16, 16, 0, 2, 0, 0, 0, 101, 0, 0, 3,
- 242, 32, 16, 0, 0, 0, 0, 0, 104, 0, 0, 2, 3, 0, 0,
- 0, 15, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 70, 16,
- 16, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 15, 0, 0, 8, 66, 0, 16, 0, 0, 0,
- 0, 0, 70, 16, 16, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 8, 34, 0, 16, 0,
- 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32,
- 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 9, 50, 0,
- 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 70,
- 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 15, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16,
- 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, 0, 50, 0,
- 0, 12, 130, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 58, 128, 32, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0,
- 0, 56, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0, 58, 0,
- 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 63, 54,
- 0, 0, 6, 66, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 8, 18, 0, 16,
- 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0, 0, 70, 130,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 7, 18,
- 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 66, 0, 0, 5, 34, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 65, 0,
- 0, 5, 66, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0,
- 0, 0, 0, 56, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 63, 0, 0, 0, 8, 98, 0, 16, 0, 0, 0, 0, 0, 6, 2,
- 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 86, 4, 16, 0, 0,
- 0, 0, 0, 29, 0, 0, 8, 18, 0, 16, 0, 1, 0, 0, 0,
- 58, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 26, 0, 0, 6, 130, 0, 16, 0, 0, 0,
- 0, 0, 58, 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 55,
- 0, 0, 10, 130, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0,
- 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16,
- 128, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 130, 0,
- 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 58,
- 0, 16, 0, 0, 0, 0, 0, 56, 0, 0, 9, 18, 0, 16, 0,
- 1, 0, 0, 0, 58, 0, 16, 128, 129, 0, 0, 0, 0, 0, 0,
- 0, 42, 128, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, 50, 0,
- 0, 11, 130, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 128, 193,
- 0, 0, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0, 0,
- 2, 0, 0, 0, 1, 64, 0, 0, 0, 0, 128, 63, 56, 0, 0,
- 7, 34, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0,
- 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 50, 0, 0, 9, 34,
- 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0, 0,
- 58, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0,
- 0, 56, 0, 0, 8, 34, 0, 16, 0, 0, 0, 0, 0, 26, 0,
- 16, 0, 0, 0, 0, 0, 26, 128, 32, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 0, 0, 0, 9, 66, 0, 16, 0, 0, 0, 0, 0,
- 1, 64, 0, 0, 0, 0, 128, 63, 26, 128, 32, 128, 65, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 0, 50, 0, 0, 9, 18, 0,
- 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 42,
- 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0,
- 56, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 29, 0, 0, 9, 18, 0, 16, 0, 0, 0, 0, 0, 58,
- 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 55, 0, 0, 9, 18, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 0, 128, 1, 64, 0, 0, 0, 0, 128, 63, 54,
- 0, 0, 5, 34, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0,
- 0, 0, 0, 63, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0,
- 0, 70, 0, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 1, 0,
- 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 56, 0, 0, 7, 114,
- 0, 16, 0, 1, 0, 0, 0, 246, 15, 16, 0, 1, 0, 0, 0,
- 70, 2, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16,
- 0, 2, 0, 0, 0, 70, 16, 16, 0, 2, 0, 0, 0, 70, 126,
- 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 56,
- 0, 0, 7, 242, 0, 16, 0, 1, 0, 0, 0, 70, 14, 16, 0,
- 1, 0, 0, 0, 70, 14, 16, 0, 2, 0, 0, 0, 56, 0, 0,
- 7, 242, 32, 16, 0, 0, 0, 0, 0, 6, 0, 16, 0, 0, 0,
- 0, 0, 70, 14, 16, 0, 1, 0, 0, 0, 62, 0, 0, 1, 83,
- 84, 65, 84, 116, 0, 0, 0, 36, 0, 0, 0, 3, 0, 0, 0,
- 0, 0, 0, 0, 3, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 82, 68, 69, 70, 168, 2, 0, 0, 1, 0, 0, 0,
- 16, 1, 0, 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255,
- 255, 0, 1, 0, 0, 116, 2, 0, 0, 188, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 201, 0, 0, 0,
- 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 217, 0,
- 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255,
- 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0,
- 230, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0,
- 0, 255, 255, 255, 255, 1, 0, 0, 0, 1, 0, 0, 0, 13, 0,
- 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 73, 110, 112, 117, 116, 83, 97, 109, 112, 108, 101,
- 114, 0, 71, 114, 97, 100, 105, 101, 110, 116, 83, 97, 109, 112, 108,
- 101, 114, 0, 73, 110, 112, 117, 116, 84, 101, 120, 116, 117, 114, 101,
- 0, 71, 114, 97, 100, 105, 101, 110, 116, 84, 101, 120, 116, 117, 114,
- 101, 0, 114, 97, 100, 105, 97, 108, 71, 114, 97, 100, 105, 101, 110,
- 116, 67, 111, 110, 115, 116, 97, 110, 116, 115, 0, 171, 171, 246, 0,
- 0, 0, 8, 0, 0, 0, 40, 1, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 0, 0,
- 12, 0, 0, 0, 2, 0, 0, 0, 240, 1, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 16, 0, 0, 0, 8, 0, 0, 0, 2, 0,
- 0, 0, 8, 2, 0, 0, 0, 0, 0, 0, 24, 2, 0, 0, 24,
- 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 28, 2, 0, 0,
- 0, 0, 0, 0, 44, 2, 0, 0, 28, 0, 0, 0, 4, 0, 0,
- 0, 2, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 52, 2,
- 0, 0, 32, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 28,
- 2, 0, 0, 0, 0, 0, 0, 63, 2, 0, 0, 36, 0, 0, 0,
- 4, 0, 0, 0, 2, 0, 0, 0, 28, 2, 0, 0, 0, 0, 0,
- 0, 78, 2, 0, 0, 40, 0, 0, 0, 4, 0, 0, 0, 2, 0,
- 0, 0, 28, 2, 0, 0, 0, 0, 0, 0, 88, 2, 0, 0, 48,
- 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, 100, 2, 0, 0,
- 0, 0, 0, 0, 100, 105, 102, 102, 0, 171, 171, 171, 1, 0, 3,
- 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 101,
- 110, 116, 101, 114, 49, 0, 1, 0, 3, 0, 1, 0, 2, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 65, 0, 171, 171, 0, 0, 3, 0,
- 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 97, 100,
- 105, 117, 115, 49, 0, 115, 113, 95, 114, 97, 100, 105, 117, 115, 49,
- 0, 114, 101, 112, 101, 97, 116, 95, 99, 111, 114, 114, 101, 99, 116,
- 0, 97, 108, 108, 111, 119, 95, 111, 100, 100, 0, 116, 114, 97, 110,
- 115, 102, 111, 114, 109, 0, 171, 171, 3, 0, 3, 0, 3, 0, 2,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 105, 99, 114, 111, 115,
- 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104,
- 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 54,
- 46, 51, 46, 57, 54, 48, 48, 46, 49, 54, 51, 56, 52, 0, 171,
- 171, 73, 83, 71, 78, 116, 0, 0, 0, 3, 0, 0, 0, 8, 0,
- 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3,
- 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
- 0, 15, 3, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 15, 3, 0, 0, 83,
- 86, 95, 80, 79, 83, 73, 84, 73, 79, 78, 0, 83, 67, 69, 78,
- 69, 95, 80, 79, 83, 73, 84, 73, 79, 78, 0, 84, 69, 88, 67,
- 79, 79, 82, 68, 0, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0,
- 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
- 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171, 171};
-#if 0
-//
-// Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
-//
-//
-// Buffer Definitions:
-//
-// cbuffer conicGradientConstants
-// {
-//
-// float2 center; // Offset: 0 Size: 8
-// float angle; // Offset: 8 Size: 4
-// float start_offset; // Offset: 12 Size: 4
-// float end_offset; // Offset: 16 Size: 4
-// float repeat_correct_conic; // Offset: 20 Size: 4 [unused]
-// float allow_odd_conic; // Offset: 24 Size: 4 [unused]
-// float3x2 transform_conic; // Offset: 32 Size: 28
-//
-// }
-//
-//
-// Resource Bindings:
-//
-// Name Type Format Dim Slot Elements
-// ------------------------------ ---------- ------- ----------- ---- --------
-// InputSampler sampler NA NA 0 1
-// GradientSampler sampler NA NA 1 1
-// InputTexture texture float4 2d 0 1
-// GradientTexture texture float4 2d 1 1
-// conicGradientConstants cbuffer NA NA 0 1
-//
-//
-//
-// Input signature:
-//
-// Name Index Mask Register SysValue Format Used
-// -------------------- ----- ------ -------- -------- ------- ------
-// SV_POSITION 0 xyzw 0 POS float
-// SCENE_POSITION 0 xyzw 1 NONE float xy
-// TEXCOORD 0 xyzw 2 NONE float xy
-//
-//
-// Output signature:
-//
-// Name Index Mask Register SysValue Format Used
-// -------------------- ----- ------ -------- -------- ------- ------
-// SV_Target 0 xyzw 0 TARGET float xyzw
-//
-//
-// Constant buffer to DX9 shader constant mappings:
-//
-// Target Reg Buffer Start Reg # of Regs Data Conversion
-// ---------- ------- --------- --------- ----------------------
-// c0 cb0 0 4 ( FLT, FLT, FLT, FLT)
-//
-//
-// Sampler/Resource to DX9 shader sampler mappings:
-//
-// Target Sampler Source Sampler Source Resource
-// -------------- --------------- ----------------
-// s0 s0 t0
-// s1 s1 t1
-//
-//
-// Level9 shader bytecode:
-//
- ps_2_x
- def c4, 0.0208350997, -0.0851330012, 0.180141002, -0.330299497
- def c5, 0.999866009, 0, 1, 3.14159274
- def c6, -2, 1.57079637, 0.159154937, 0.5
- dcl t0
- dcl t1
- dcl_2d s0
- dcl_2d s1
- dp2add r0.w, t0, c2, c2.z
- add r0.x, -r0.w, c0.x
- dp2add r0.z, t0, c3, c3.z
- add r0.z, -r0.z, c0.y
- abs r0.yw, r0.xxzz
- max r1.w, r0.y, r0.w
- rcp r1.x, r1.w
- min r1.y, r0.w, r0.y
- add r0.y, -r0.y, r0.w
- cmp r0.y, r0.y, c5.y, c5.z
- mul r0.w, r1.x, r1.y
- mul r1.x, r0.w, r0.w
- mad r1.y, r1.x, c4.x, c4.y
- mad r1.y, r1.x, r1.y, c4.z
- mad r1.y, r1.x, r1.y, c4.w
- mad r1.x, r1.x, r1.y, c5.x
- mul r0.w, r0.w, r1.x
- mad r1.x, r0.w, c6.x, c6.y
- mad r0.y, r1.x, r0.y, r0.w
- cmp r0.w, -r0.z, -c5.y, -c5.w
- add r0.y, r0.w, r0.y
- add r0.w, r0.y, r0.y
- max r1.x, r0.x, -r0.z
- min r1.y, -r0.z, r0.x
- cmp r0.x, r1.x, c5.z, c5.y
- cmp r0.x, r1.y, c5.y, r0.x
- mad r0.x, r0.x, -r0.w, r0.y
- add r0.x, r0.x, -c0.z
- mov r0.w, c0.w
- add r0.y, -r0.w, c1.x
- rcp r0.y, r0.y
- mul r0.x, r0.x, r0.y
- mov r0.z, c6.z
- mad r0.x, r0.x, r0.z, c1.x
- add r0.x, r0.x, -c0.w
- add r0.x, r0.x, c6.w
- abs r0.y, r0.x
- frc r0.y, r0.y
- cmp r0.x, r0.x, r0.y, -r0.y
- mov r0.y, c6.w
- texld r1, t1, s0
- texld r0, r0, s1
- mul r0.xyz, r0.w, r0
- mul r0, r1, r0
- mov oC0, r0
-
-// approximately 47 instruction slots used (2 texture, 45 arithmetic)
-ps_4_0
-dcl_constantbuffer cb0[4], immediateIndexed
-dcl_sampler s0, mode_default
-dcl_sampler s1, mode_default
-dcl_resource_texture2d (float,float,float,float) t0
-dcl_resource_texture2d (float,float,float,float) t1
-dcl_input_ps linear v1.xy
-dcl_input_ps linear v2.xy
-dcl_output o0.xyzw
-dcl_temps 2
-dp2 r0.x, v1.xyxx, cb0[2].xyxx
-add r0.x, r0.x, cb0[2].z
-dp2 r0.y, v1.xyxx, cb0[3].xyxx
-add r0.y, r0.y, cb0[3].z
-add r0.xy, -r0.xyxx, cb0[0].xyxx
-max r0.z, |r0.y|, |r0.x|
-div r0.z, l(1.000000, 1.000000, 1.000000, 1.000000), r0.z
-min r0.w, |r0.y|, |r0.x|
-mul r0.z, r0.z, r0.w
-mul r0.w, r0.z, r0.z
-mad r1.x, r0.w, l(0.020835), l(-0.085133)
-mad r1.x, r0.w, r1.x, l(0.180141)
-mad r1.x, r0.w, r1.x, l(-0.330299)
-mad r0.w, r0.w, r1.x, l(0.999866)
-mul r1.x, r0.w, r0.z
-mad r1.x, r1.x, l(-2.000000), l(1.570796)
-lt r1.y, |r0.y|, |r0.x|
-and r1.x, r1.y, r1.x
-mad r0.z, r0.z, r0.w, r1.x
-lt r0.w, -r0.y, r0.y
-and r0.w, r0.w, l(0xc0490fdb)
-add r0.z, r0.w, r0.z
-min r0.w, -r0.y, r0.x
-max r0.x, -r0.y, r0.x
-ge r0.x, r0.x, -r0.x
-lt r0.y, r0.w, -r0.w
-and r0.x, r0.x, r0.y
-movc r0.x, r0.x, -r0.z, r0.z
-add r0.x, r0.x, -cb0[0].z
-add r0.y, -cb0[0].w, cb0[1].x
-div r0.y, l(1.000000, 1.000000, 1.000000, 1.000000), r0.y
-mul r0.x, r0.x, r0.y
-mad r0.x, r0.x, l(0.159155), cb0[1].x
-add r0.x, r0.x, -cb0[0].w
-add r0.x, r0.x, l(0.500000)
-ge r0.y, r0.x, -r0.x
-frc r0.x, |r0.x|
-movc r0.x, r0.y, r0.x, -r0.x
-mov r0.y, l(0.500000)
-sample r0.xyzw, r0.xyxx, t1.xyzw, s1
-mul r0.xyz, r0.wwww, r0.xyzx
-sample r1.xyzw, v2.xyxx, t0.xyzw, s0
-mul o0.xyzw, r0.xyzw, r1.xyzw
-ret
-// Approximately 44 instruction slots used
-#endif
-
-const BYTE SampleConicGradientPS[] = {
- 68, 88, 66, 67, 111, 210, 133, 71, 96, 114, 123, 208, 6, 154, 50,
- 242, 194, 61, 177, 240, 1, 0, 0, 0, 184, 13, 0, 0, 6, 0,
- 0, 0, 56, 0, 0, 0, 224, 3, 0, 0, 240, 9, 0, 0, 108,
- 10, 0, 0, 8, 13, 0, 0, 132, 13, 0, 0, 65, 111, 110, 57,
- 160, 3, 0, 0, 160, 3, 0, 0, 0, 2, 255, 255, 104, 3, 0,
- 0, 56, 0, 0, 0, 1, 0, 44, 0, 0, 0, 56, 0, 0, 0,
- 56, 0, 2, 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1,
- 1, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
- 1, 2, 255, 255, 81, 0, 0, 5, 4, 0, 15, 160, 95, 174, 170,
- 60, 54, 90, 174, 189, 226, 118, 56, 62, 4, 29, 169, 190, 81, 0,
- 0, 5, 5, 0, 15, 160, 56, 247, 127, 63, 0, 0, 0, 0, 0,
- 0, 128, 63, 219, 15, 73, 64, 81, 0, 0, 5, 6, 0, 15, 160,
- 0, 0, 0, 192, 219, 15, 201, 63, 131, 249, 34, 62, 0, 0, 0,
- 63, 31, 0, 0, 2, 0, 0, 0, 128, 0, 0, 15, 176, 31, 0,
- 0, 2, 0, 0, 0, 128, 1, 0, 15, 176, 31, 0, 0, 2, 0,
- 0, 0, 144, 0, 8, 15, 160, 31, 0, 0, 2, 0, 0, 0, 144,
- 1, 8, 15, 160, 90, 0, 0, 4, 0, 0, 8, 128, 0, 0, 228,
- 176, 2, 0, 228, 160, 2, 0, 170, 160, 2, 0, 0, 3, 0, 0,
- 1, 128, 0, 0, 255, 129, 0, 0, 0, 160, 90, 0, 0, 4, 0,
- 0, 4, 128, 0, 0, 228, 176, 3, 0, 228, 160, 3, 0, 170, 160,
- 2, 0, 0, 3, 0, 0, 4, 128, 0, 0, 170, 129, 0, 0, 85,
- 160, 35, 0, 0, 2, 0, 0, 10, 128, 0, 0, 160, 128, 11, 0,
- 0, 3, 1, 0, 8, 128, 0, 0, 85, 128, 0, 0, 255, 128, 6,
- 0, 0, 2, 1, 0, 1, 128, 1, 0, 255, 128, 10, 0, 0, 3,
- 1, 0, 2, 128, 0, 0, 255, 128, 0, 0, 85, 128, 2, 0, 0,
- 3, 0, 0, 2, 128, 0, 0, 85, 129, 0, 0, 255, 128, 88, 0,
- 0, 4, 0, 0, 2, 128, 0, 0, 85, 128, 5, 0, 85, 160, 5,
- 0, 170, 160, 5, 0, 0, 3, 0, 0, 8, 128, 1, 0, 0, 128,
- 1, 0, 85, 128, 5, 0, 0, 3, 1, 0, 1, 128, 0, 0, 255,
- 128, 0, 0, 255, 128, 4, 0, 0, 4, 1, 0, 2, 128, 1, 0,
- 0, 128, 4, 0, 0, 160, 4, 0, 85, 160, 4, 0, 0, 4, 1,
- 0, 2, 128, 1, 0, 0, 128, 1, 0, 85, 128, 4, 0, 170, 160,
- 4, 0, 0, 4, 1, 0, 2, 128, 1, 0, 0, 128, 1, 0, 85,
- 128, 4, 0, 255, 160, 4, 0, 0, 4, 1, 0, 1, 128, 1, 0,
- 0, 128, 1, 0, 85, 128, 5, 0, 0, 160, 5, 0, 0, 3, 0,
- 0, 8, 128, 0, 0, 255, 128, 1, 0, 0, 128, 4, 0, 0, 4,
- 1, 0, 1, 128, 0, 0, 255, 128, 6, 0, 0, 160, 6, 0, 85,
- 160, 4, 0, 0, 4, 0, 0, 2, 128, 1, 0, 0, 128, 0, 0,
- 85, 128, 0, 0, 255, 128, 88, 0, 0, 4, 0, 0, 8, 128, 0,
- 0, 170, 129, 5, 0, 85, 161, 5, 0, 255, 161, 2, 0, 0, 3,
- 0, 0, 2, 128, 0, 0, 255, 128, 0, 0, 85, 128, 2, 0, 0,
- 3, 0, 0, 8, 128, 0, 0, 85, 128, 0, 0, 85, 128, 11, 0,
- 0, 3, 1, 0, 1, 128, 0, 0, 0, 128, 0, 0, 170, 129, 10,
- 0, 0, 3, 1, 0, 2, 128, 0, 0, 170, 129, 0, 0, 0, 128,
- 88, 0, 0, 4, 0, 0, 1, 128, 1, 0, 0, 128, 5, 0, 170,
- 160, 5, 0, 85, 160, 88, 0, 0, 4, 0, 0, 1, 128, 1, 0,
- 85, 128, 5, 0, 85, 160, 0, 0, 0, 128, 4, 0, 0, 4, 0,
- 0, 1, 128, 0, 0, 0, 128, 0, 0, 255, 129, 0, 0, 85, 128,
- 2, 0, 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 0, 0, 170,
- 161, 1, 0, 0, 2, 0, 0, 8, 128, 0, 0, 255, 160, 2, 0,
- 0, 3, 0, 0, 2, 128, 0, 0, 255, 129, 1, 0, 0, 160, 6,
- 0, 0, 2, 0, 0, 2, 128, 0, 0, 85, 128, 5, 0, 0, 3,
- 0, 0, 1, 128, 0, 0, 0, 128, 0, 0, 85, 128, 1, 0, 0,
- 2, 0, 0, 4, 128, 6, 0, 170, 160, 4, 0, 0, 4, 0, 0,
- 1, 128, 0, 0, 0, 128, 0, 0, 170, 128, 1, 0, 0, 160, 2,
- 0, 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 0, 0, 255, 161,
- 2, 0, 0, 3, 0, 0, 1, 128, 0, 0, 0, 128, 6, 0, 255,
- 160, 35, 0, 0, 2, 0, 0, 2, 128, 0, 0, 0, 128, 19, 0,
- 0, 2, 0, 0, 2, 128, 0, 0, 85, 128, 88, 0, 0, 4, 0,
- 0, 1, 128, 0, 0, 0, 128, 0, 0, 85, 128, 0, 0, 85, 129,
- 1, 0, 0, 2, 0, 0, 2, 128, 6, 0, 255, 160, 66, 0, 0,
- 3, 1, 0, 15, 128, 1, 0, 228, 176, 0, 8, 228, 160, 66, 0,
- 0, 3, 0, 0, 15, 128, 0, 0, 228, 128, 1, 8, 228, 160, 5,
- 0, 0, 3, 0, 0, 7, 128, 0, 0, 255, 128, 0, 0, 228, 128,
- 5, 0, 0, 3, 0, 0, 15, 128, 1, 0, 228, 128, 0, 0, 228,
- 128, 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, 255, 255,
- 0, 0, 83, 72, 68, 82, 8, 6, 0, 0, 64, 0, 0, 0, 130,
- 1, 0, 0, 89, 0, 0, 4, 70, 142, 32, 0, 0, 0, 0, 0,
- 4, 0, 0, 0, 90, 0, 0, 3, 0, 96, 16, 0, 0, 0, 0,
- 0, 90, 0, 0, 3, 0, 96, 16, 0, 1, 0, 0, 0, 88, 24,
- 0, 4, 0, 112, 16, 0, 0, 0, 0, 0, 85, 85, 0, 0, 88,
- 24, 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0,
- 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, 0, 98, 16, 0,
- 3, 50, 16, 16, 0, 2, 0, 0, 0, 101, 0, 0, 3, 242, 32,
- 16, 0, 0, 0, 0, 0, 104, 0, 0, 2, 2, 0, 0, 0, 15,
- 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0,
- 1, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 2, 0, 0,
- 0, 0, 0, 0, 8, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0, 0, 0, 0, 2,
- 0, 0, 0, 15, 0, 0, 8, 34, 0, 16, 0, 0, 0, 0, 0,
- 70, 16, 16, 0, 1, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 8, 34, 0, 16, 0, 0, 0,
- 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 42, 128, 32, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 9, 50, 0, 16, 0,
- 0, 0, 0, 0, 70, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0,
- 0, 70, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0,
- 0, 9, 66, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 129,
- 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0, 0,
- 0, 0, 0, 0, 14, 0, 0, 10, 66, 0, 16, 0, 0, 0, 0,
- 0, 2, 64, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0,
- 128, 63, 0, 0, 128, 63, 42, 0, 16, 0, 0, 0, 0, 0, 51,
- 0, 0, 9, 130, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 128,
- 129, 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0,
- 0, 0, 0, 0, 0, 56, 0, 0, 7, 66, 0, 16, 0, 0, 0,
- 0, 0, 42, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0,
- 0, 0, 0, 56, 0, 0, 7, 130, 0, 16, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 42, 0, 16, 0, 0, 0, 0,
- 0, 50, 0, 0, 9, 18, 0, 16, 0, 1, 0, 0, 0, 58, 0,
- 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 95, 174, 170, 60, 1,
- 64, 0, 0, 54, 90, 174, 189, 50, 0, 0, 9, 18, 0, 16, 0,
- 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 1, 0, 0, 0, 1, 64, 0, 0, 226, 118, 56, 62, 50, 0,
- 0, 9, 18, 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64, 0, 0,
- 4, 29, 169, 190, 50, 0, 0, 9, 130, 0, 16, 0, 0, 0, 0,
- 0, 58, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 1, 0,
- 0, 0, 1, 64, 0, 0, 56, 247, 127, 63, 56, 0, 0, 7, 18,
- 0, 16, 0, 1, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 50, 0, 0, 9, 18, 0, 16,
- 0, 1, 0, 0, 0, 10, 0, 16, 0, 1, 0, 0, 0, 1, 64,
- 0, 0, 0, 0, 0, 192, 1, 64, 0, 0, 219, 15, 201, 63, 49,
- 0, 0, 9, 34, 0, 16, 0, 1, 0, 0, 0, 26, 0, 16, 128,
- 129, 0, 0, 0, 0, 0, 0, 0, 10, 0, 16, 128, 129, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 7, 18, 0, 16, 0, 1, 0,
- 0, 0, 26, 0, 16, 0, 1, 0, 0, 0, 10, 0, 16, 0, 1,
- 0, 0, 0, 50, 0, 0, 9, 66, 0, 16, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 1, 0, 0, 0, 49, 0, 0, 8, 130, 0,
- 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0,
- 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 1, 0, 0, 7,
- 130, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0,
- 0, 1, 64, 0, 0, 219, 15, 73, 192, 0, 0, 0, 7, 66, 0,
- 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0, 0, 0, 0, 42,
- 0, 16, 0, 0, 0, 0, 0, 51, 0, 0, 8, 130, 0, 16, 0,
- 0, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 52, 0, 0, 8, 18, 0,
- 16, 0, 0, 0, 0, 0, 26, 0, 16, 128, 65, 0, 0, 0, 0,
- 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 29, 0, 0, 8,
- 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0, 49, 0,
- 0, 8, 34, 0, 16, 0, 0, 0, 0, 0, 58, 0, 16, 0, 0,
- 0, 0, 0, 58, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16,
- 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0, 0, 0, 55, 0,
- 0, 10, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0,
- 0, 0, 0, 42, 0, 16, 128, 65, 0, 0, 0, 0, 0, 0, 0,
- 42, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 0, 16,
- 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 42, 128,
- 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 10, 34, 0, 16, 0, 0, 0, 0, 0, 58, 128, 32, 128,
- 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 128, 32,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 14, 0, 0, 10, 34, 0,
- 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 128, 63, 0,
- 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 26, 0, 16, 0,
- 0, 0, 0, 0, 56, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0,
- 0, 10, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0,
- 0, 0, 50, 0, 0, 10, 18, 0, 16, 0, 0, 0, 0, 0, 10,
- 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 131, 249, 34, 62,
- 10, 128, 32, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 9, 18, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 0, 0,
- 0, 0, 58, 128, 32, 128, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0,
- 63, 29, 0, 0, 8, 34, 0, 16, 0, 0, 0, 0, 0, 10, 0,
- 16, 0, 0, 0, 0, 0, 10, 0, 16, 128, 65, 0, 0, 0, 0,
- 0, 0, 0, 26, 0, 0, 6, 18, 0, 16, 0, 0, 0, 0, 0,
- 10, 0, 16, 128, 129, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0,
- 10, 18, 0, 16, 0, 0, 0, 0, 0, 26, 0, 16, 0, 0, 0,
- 0, 0, 10, 0, 16, 0, 0, 0, 0, 0, 10, 0, 16, 128, 65,
- 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 5, 34, 0, 16, 0,
- 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 63, 69, 0, 0,
- 9, 242, 0, 16, 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0,
- 0, 0, 70, 126, 16, 0, 1, 0, 0, 0, 0, 96, 16, 0, 1,
- 0, 0, 0, 56, 0, 0, 7, 114, 0, 16, 0, 0, 0, 0, 0,
- 246, 15, 16, 0, 0, 0, 0, 0, 70, 2, 16, 0, 0, 0, 0,
- 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 70, 16,
- 16, 0, 2, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0,
- 96, 16, 0, 0, 0, 0, 0, 56, 0, 0, 7, 242, 32, 16, 0,
- 0, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 70, 14, 16,
- 0, 1, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0,
- 0, 0, 44, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3,
- 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68,
- 69, 70, 148, 2, 0, 0, 1, 0, 0, 0, 16, 1, 0, 0, 5,
- 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, 0, 0,
- 96, 2, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 201, 0, 0, 0, 3, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0, 217, 0, 0, 0, 2, 0, 0,
- 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255, 0, 0,
- 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 230, 0, 0, 0, 2,
- 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 255, 255, 255, 255,
- 1, 0, 0, 0, 1, 0, 0, 0, 13, 0, 0, 0, 246, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 73,
- 110, 112, 117, 116, 83, 97, 109, 112, 108, 101, 114, 0, 71, 114, 97,
- 100, 105, 101, 110, 116, 83, 97, 109, 112, 108, 101, 114, 0, 73, 110,
- 112, 117, 116, 84, 101, 120, 116, 117, 114, 101, 0, 71, 114, 97, 100,
- 105, 101, 110, 116, 84, 101, 120, 116, 117, 114, 101, 0, 99, 111, 110,
- 105, 99, 71, 114, 97, 100, 105, 101, 110, 116, 67, 111, 110, 115, 116,
- 97, 110, 116, 115, 0, 171, 171, 171, 246, 0, 0, 0, 7, 0, 0,
- 0, 40, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 208, 1, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 2,
- 0, 0, 0, 216, 1, 0, 0, 0, 0, 0, 0, 232, 1, 0, 0,
- 8, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 240, 1, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 12, 0, 0, 0, 4, 0,
- 0, 0, 2, 0, 0, 0, 240, 1, 0, 0, 0, 0, 0, 0, 13,
- 2, 0, 0, 16, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0,
- 240, 1, 0, 0, 0, 0, 0, 0, 24, 2, 0, 0, 20, 0, 0,
- 0, 4, 0, 0, 0, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0,
- 0, 0, 45, 2, 0, 0, 24, 0, 0, 0, 4, 0, 0, 0, 0,
- 0, 0, 0, 240, 1, 0, 0, 0, 0, 0, 0, 61, 2, 0, 0,
- 32, 0, 0, 0, 28, 0, 0, 0, 2, 0, 0, 0, 80, 2, 0,
- 0, 0, 0, 0, 0, 99, 101, 110, 116, 101, 114, 0, 171, 1, 0,
- 3, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
- 110, 103, 108, 101, 0, 171, 171, 0, 0, 3, 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 115, 116, 97, 114, 116, 95, 111,
- 102, 102, 115, 101, 116, 0, 101, 110, 100, 95, 111, 102, 102, 115, 101,
- 116, 0, 114, 101, 112, 101, 97, 116, 95, 99, 111, 114, 114, 101, 99,
- 116, 95, 99, 111, 110, 105, 99, 0, 97, 108, 108, 111, 119, 95, 111,
- 100, 100, 95, 99, 111, 110, 105, 99, 0, 116, 114, 97, 110, 115, 102,
- 111, 114, 109, 95, 99, 111, 110, 105, 99, 0, 171, 171, 171, 3, 0,
- 3, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
- 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76,
- 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105,
- 108, 101, 114, 32, 54, 46, 51, 46, 57, 54, 48, 48, 46, 49, 54,
- 51, 56, 52, 0, 171, 171, 73, 83, 71, 78, 116, 0, 0, 0, 3,
- 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 1, 0, 0, 0, 15, 3, 0, 0, 107, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0,
- 15, 3, 0, 0, 83, 86, 95, 80, 79, 83, 73, 84, 73, 79, 78,
- 0, 83, 67, 69, 78, 69, 95, 80, 79, 83, 73, 84, 73, 79, 78,
- 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 79, 83, 71, 78, 44,
- 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0,
- 171, 171};
diff --git a/gfx/2d/ShadersD2D1.hlsl b/gfx/2d/ShadersD2D1.hlsl
@@ -1,162 +0,0 @@
-/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-Texture2D InputTexture : register(t0);
-SamplerState InputSampler : register(s0);
-Texture2D GradientTexture : register(t1);
-SamplerState GradientSampler : register(s1);
-
-cbuffer radialGradientConstants : register(b0)
-{
- // Precalculate as much as we can!
- float3 diff : packoffset(c0.x);
- float2 center1 : packoffset(c1.x);
- float A : packoffset(c1.z);
- float radius1 : packoffset(c1.w);
- float sq_radius1 : packoffset(c2.x);
-
- // The next two values are used for a hack to compensate for an apparent
- // bug in D2D where the GradientSampler SamplerState doesn't get the
- // correct addressing modes.
- float repeat_correct : packoffset(c2.y);
- float allow_odd : packoffset(c2.z);
-
- float3x2 transform : packoffset(c3.x);
-}
-
-cbuffer conicGradientConstants : register(b0)
-{
- float2 center : packoffset(c0.x);
- float angle : packoffset(c0.z);
- float start_offset : packoffset(c0.w);
- float end_offset : packoffset(c1.x);
-
- // The next two values are used for a hack to compensate for an apparent
- // bug in D2D where the GradientSampler SamplerState doesn't get the
- // correct addressing modes.
- float repeat_correct_conic : packoffset(c1.y);
- float allow_odd_conic : packoffset(c1.z);
-
- float3x2 transform_conic : packoffset(c2.x);
-}
-
-
-static const float M_PI = 3.14159265f;
-
-float4 SampleConicGradientPS(
- float4 clipSpaceOutput : SV_POSITION,
- float4 sceneSpaceOutput : SCENE_POSITION,
- float4 texelSpaceInput0 : TEXCOORD0
- ) : SV_Target
-{
- float2 p = float2(sceneSpaceOutput.x * transform_conic._11 + sceneSpaceOutput.y * transform_conic._21 + transform_conic._31,
- sceneSpaceOutput.x * transform_conic._12 + sceneSpaceOutput.y * transform_conic._22 + transform_conic._32);
- float2 dir = float2(
- -(center.y - p.y),
- (center.x - p.x));
- float vstart = start_offset;
- float vend = end_offset;
- float n = 1/(vend-vstart);
- float current_angle = atan2(dir.y, dir.x)-angle;
- float lambda = fmod(n*current_angle/M_PI/2+vend-vstart+.5,1);
- float offset = lambda;
- float4 output = GradientTexture.Sample(GradientSampler, float2(offset, 0.5));
- // Premultiply
- output.rgb *= output.a;
- // Multiply the output color by the input mask for the operation.
- output *= InputTexture.Sample(InputSampler, texelSpaceInput0.xy);
-
- return output;
-};
-
-float4 SampleRadialGradientPS(
- float4 clipSpaceOutput : SV_POSITION,
- float4 sceneSpaceOutput : SCENE_POSITION,
- float4 texelSpaceInput0 : TEXCOORD0
- ) : SV_Target
-{
- // Radial gradient painting is defined as the set of circles whose centers
- // are described by C(t) = (C2 - C1) * t + C1; with radii
- // R(t) = (R2 - R1) * t + R1; for R(t) > 0. This shader solves the
- // quadratic equation that arises when calculating t for pixel (x, y).
- //
- // A more extensive derrivation can be found in the pixman radial gradient
- // code.
-
- float2 p = float2(sceneSpaceOutput.x * transform._11 + sceneSpaceOutput.y * transform._21 + transform._31,
- sceneSpaceOutput.x * transform._12 + sceneSpaceOutput.y * transform._22 + transform._32);
- float3 dp = float3(p - center1, radius1);
-
- // dpx * dcx + dpy * dcy + r * dr
- float B = dot(dp, diff);
-
- float C = pow(dp.x, 2) + pow(dp.y, 2) - sq_radius1;
-
- float det = pow(B, 2) - A * C;
-
- float sqrt_det = sqrt(abs(det));
-
- float2 t = (B + float2(sqrt_det, -sqrt_det)) / A;
-
- float2 isValid = step(float2(-radius1, -radius1), t * diff.z);
-
- float upper_t = lerp(t.y, t.x, isValid.x);
-
- // Addressing mode bug work-around.. first let's see if we should consider odd repetitions separately.
- float oddeven = abs(fmod(floor(upper_t), 2)) * allow_odd;
-
- // Now let's calculate even or odd addressing in a branchless manner.
- float upper_t_repeated = ((upper_t - floor(upper_t)) * (1.0f - oddeven)) + ((ceil(upper_t) - upper_t) * oddeven);
-
- float4 output = GradientTexture.Sample(GradientSampler, float2(upper_t * (1.0f - repeat_correct) + upper_t_repeated * repeat_correct, 0.5));
- // Premultiply
- output.rgb *= output.a;
- // Multiply the output color by the input mask for the operation.
- output *= InputTexture.Sample(InputSampler, texelSpaceInput0.xy);
-
- // In order to compile for PS_4_0_level_9_3 we need to be branchless.
- // This is essentially returning nothing, i.e. bailing early if:
- // det < 0 || max(isValid.x, isValid.y) <= 0
- return output * abs(step(max(isValid.x, isValid.y), 0) - 1.0f) * step(0, det);
-};
-
-float4 SampleRadialGradientA0PS(
- float4 clipSpaceOutput : SV_POSITION,
- float4 sceneSpaceOutput : SCENE_POSITION,
- float4 texelSpaceInput0 : TEXCOORD0
- ) : SV_Target
-{
- // This simpler shader is used for the degenerate case where A is 0,
- // i.e. we're actually solving a linear equation.
-
- float2 p = float2(sceneSpaceOutput.x * transform._11 + sceneSpaceOutput.y * transform._21 + transform._31,
- sceneSpaceOutput.x * transform._12 + sceneSpaceOutput.y * transform._22 + transform._32);
- float3 dp = float3(p - center1, radius1);
-
- // dpx * dcx + dpy * dcy + r * dr
- float B = dot(dp, diff);
-
- float C = pow(dp.x, 2) + pow(dp.y, 2) - pow(radius1, 2);
-
- float t = 0.5 * C / B;
-
- // Addressing mode bug work-around.. first let's see if we should consider odd repetitions separately.
- float oddeven = abs(fmod(floor(t), 2)) * allow_odd;
-
- // Now let's calculate even or odd addressing in a branchless manner.
- float t_repeated = ((t - floor(t)) * (1.0f - oddeven)) + ((ceil(t) - t) * oddeven);
-
- float4 output = GradientTexture.Sample(GradientSampler, float2(t * (1.0f - repeat_correct) + t_repeated * repeat_correct, 0.5));
- // Premultiply
- output.rgb *= output.a;
- // Multiply the output color by the input mask for the operation.
- output *= InputTexture.Sample(InputSampler, texelSpaceInput0.xy);
-
- // In order to compile for PS_4_0_level_9_3 we need to be branchless.
- // This is essentially returning nothing, i.e. bailing early if:
- // -radius1 >= t * diff.z
- return output * abs(step(t * diff.z, -radius1) - 1.0f);
-};
-
diff --git a/gfx/2d/SourceSurfaceD2D1.cpp b/gfx/2d/SourceSurfaceD2D1.cpp
@@ -1,245 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "SourceSurfaceD2D1.h"
-#include "DrawTargetD2D1.h"
-
-namespace mozilla {
-namespace gfx {
-
-SourceSurfaceD2D1::SourceSurfaceD2D1(ID2D1Image* aImage,
- ID2D1DeviceContext* aDC,
- SurfaceFormat aFormat,
- const IntSize& aSize, DrawTargetD2D1* aDT)
- : mImage(aImage),
- mDC(aDC),
- mDevice(Factory::GetD2D1Device()),
- mFormat(aFormat),
- mSize(aSize),
- mDrawTarget(aDT),
- mOwnsCopy(false) {
- aImage->QueryInterface((ID2D1Bitmap1**)getter_AddRefs(mRealizedBitmap));
- if (aDT) {
- mSnapshotLock = aDT->mSnapshotLock;
- }
-}
-
-SourceSurfaceD2D1::~SourceSurfaceD2D1() {
- if (mOwnsCopy) {
- DrawTargetD2D1::mVRAMUsageSS -=
- mSize.width * mSize.height * BytesPerPixel(mFormat);
- }
-}
-
-bool SourceSurfaceD2D1::IsValid() const {
- return mDevice == Factory::GetD2D1Device();
-}
-
-already_AddRefed<DataSourceSurface> SourceSurfaceD2D1::GetDataSurface() {
- Maybe<MutexAutoLock> lock;
- if (mSnapshotLock) {
- lock.emplace(*mSnapshotLock);
- }
-
- if (!EnsureRealizedBitmap()) {
- gfxCriticalError() << "Failed to realize a bitmap, device "
- << hexa(mDevice);
- return nullptr;
- }
-
- HRESULT hr;
-
- RefPtr<ID2D1Bitmap1> softwareBitmap;
- D2D1_BITMAP_PROPERTIES1 props;
- props.dpiX = 96;
- props.dpiY = 96;
- props.pixelFormat = D2DPixelFormat(mFormat);
- props.colorContext = nullptr;
- props.bitmapOptions =
- D2D1_BITMAP_OPTIONS_CANNOT_DRAW | D2D1_BITMAP_OPTIONS_CPU_READ;
- hr = mDC->CreateBitmap(D2DIntSize(mSize), nullptr, 0, props,
- (ID2D1Bitmap1**)getter_AddRefs(softwareBitmap));
-
- if (FAILED(hr)) {
- gfxCriticalError() << "Failed to create software bitmap: " << mSize
- << " Code: " << hexa(hr);
- return nullptr;
- }
-
- D2D1_POINT_2U point = D2D1::Point2U(0, 0);
- D2D1_RECT_U rect = D2D1::RectU(0, 0, mSize.width, mSize.height);
-
- hr = softwareBitmap->CopyFromBitmap(&point, mRealizedBitmap, &rect);
-
- if (FAILED(hr)) {
- gfxWarning() << "Failed to readback into software bitmap. Code: "
- << hexa(hr);
- return nullptr;
- }
-
- return MakeAndAddRef<DataSourceSurfaceD2D1>(softwareBitmap, mFormat);
-}
-
-bool SourceSurfaceD2D1::EnsureRealizedBitmap() {
- if (mRealizedBitmap) {
- return true;
- }
-
- // Why aren't we using mDevice here or anywhere else?
- RefPtr<ID2D1Device> device = Factory::GetD2D1Device();
- if (!device) {
- return false;
- }
-
- RefPtr<ID2D1DeviceContext> dc;
- device->CreateDeviceContext(D2D1_DEVICE_CONTEXT_OPTIONS_NONE,
- getter_AddRefs(dc));
-
- D2D1_BITMAP_PROPERTIES1 props;
- props.dpiX = 96;
- props.dpiY = 96;
- props.pixelFormat = D2DPixelFormat(mFormat);
- props.colorContext = nullptr;
- props.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET;
- dc->CreateBitmap(D2DIntSize(mSize), nullptr, 0, props,
- (ID2D1Bitmap1**)getter_AddRefs(mRealizedBitmap));
-
- dc->SetTarget(mRealizedBitmap);
-
- dc->BeginDraw();
- dc->DrawImage(mImage);
- dc->EndDraw();
-
- return true;
-}
-
-void SourceSurfaceD2D1::DrawTargetWillChange() {
- MOZ_ASSERT(mSnapshotLock);
- mSnapshotLock->AssertCurrentThreadOwns();
-
- // At this point in time this should always be true here.
- MOZ_ASSERT(mRealizedBitmap);
-
- RefPtr<ID2D1Bitmap1> oldBitmap = mRealizedBitmap;
-
- D2D1_BITMAP_PROPERTIES1 props;
- props.dpiX = 96;
- props.dpiY = 96;
- props.pixelFormat = D2DPixelFormat(mFormat);
- props.colorContext = nullptr;
- props.bitmapOptions = D2D1_BITMAP_OPTIONS_TARGET;
- HRESULT hr =
- mDC->CreateBitmap(D2DIntSize(mSize), nullptr, 0, props,
- (ID2D1Bitmap1**)getter_AddRefs(mRealizedBitmap));
-
- if (FAILED(hr)) {
- gfxCriticalError()
- << "Failed to create bitmap to make DrawTarget copy. Size: " << mSize
- << " Code: " << hexa(hr);
- MarkIndependent();
- return;
- }
-
- D2D1_POINT_2U point = D2D1::Point2U(0, 0);
- D2D1_RECT_U rect = D2D1::RectU(0, 0, mSize.width, mSize.height);
- mRealizedBitmap->CopyFromBitmap(&point, oldBitmap, &rect);
- mImage = mRealizedBitmap;
-
- DrawTargetD2D1::mVRAMUsageSS +=
- mSize.width * mSize.height * BytesPerPixel(mFormat);
- mOwnsCopy = true;
-
- // Ensure the object stays alive for the duration of MarkIndependent.
- RefPtr<SourceSurfaceD2D1> deathGrip = this;
- // We now no longer depend on the source surface content remaining the same.
- MarkIndependent();
-}
-
-void SourceSurfaceD2D1::MarkIndependent() {
- if (mDrawTarget) {
- MOZ_ASSERT(mDrawTarget->mSnapshot == this);
- mDrawTarget->mSnapshot = nullptr;
- mDrawTarget = nullptr;
- }
-}
-
-DataSourceSurfaceD2D1::DataSourceSurfaceD2D1(ID2D1Bitmap1* aMappableBitmap,
- SurfaceFormat aFormat)
- : mBitmap(aMappableBitmap),
- mFormat(aFormat),
- mIsMapped(false),
- mImplicitMapped(false) {}
-
-DataSourceSurfaceD2D1::~DataSourceSurfaceD2D1() {
- if (mImplicitMapped) {
- mBitmap->Unmap();
- }
-}
-
-IntSize DataSourceSurfaceD2D1::GetSize() const {
- D2D1_SIZE_F size = mBitmap->GetSize();
-
- return IntSize(int32_t(size.width), int32_t(size.height));
-}
-
-uint8_t* DataSourceSurfaceD2D1::GetData() {
- EnsureMapped();
-
- return mMap.bits;
-}
-
-bool DataSourceSurfaceD2D1::Map(MapType aMapType,
- MappedSurface* aMappedSurface) {
- // DataSourceSurfaces used with the new Map API should not be used with
- // GetData!!
- MOZ_ASSERT(!mImplicitMapped);
- MOZ_ASSERT(!mIsMapped);
-
- if (aMapType != MapType::READ) {
- gfxWarning() << "Attempt to map D2D1 DrawTarget for writing.";
- return false;
- }
-
- D2D1_MAPPED_RECT map;
- if (FAILED(mBitmap->Map(D2D1_MAP_OPTIONS_READ, &map))) {
- gfxCriticalError() << "Failed to map bitmap (M).";
- return false;
- }
- aMappedSurface->mData = map.bits;
- aMappedSurface->mStride = map.pitch;
-
- mIsMapped = !!aMappedSurface->mData;
- return mIsMapped;
-}
-
-void DataSourceSurfaceD2D1::Unmap() {
- MOZ_ASSERT(mIsMapped);
-
- mIsMapped = false;
- mBitmap->Unmap();
-}
-
-int32_t DataSourceSurfaceD2D1::Stride() {
- EnsureMapped();
-
- return mMap.pitch;
-}
-
-void DataSourceSurfaceD2D1::EnsureMapped() {
- // Do not use GetData() after having used Map!
- MOZ_ASSERT(!mIsMapped);
- if (mImplicitMapped) {
- return;
- }
- if (FAILED(mBitmap->Map(D2D1_MAP_OPTIONS_READ, &mMap))) {
- gfxCriticalError() << "Failed to map bitmap (EM).";
- return;
- }
- mImplicitMapped = true;
-}
-
-} // namespace gfx
-} // namespace mozilla
diff --git a/gfx/2d/SourceSurfaceD2D1.h b/gfx/2d/SourceSurfaceD2D1.h
@@ -1,102 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_GFX_SOURCESURFACED2D1_H_
-#define MOZILLA_GFX_SOURCESURFACED2D1_H_
-
-#include "2D.h"
-#include "HelpersD2D.h"
-#include <vector>
-#include <d3d11.h>
-#include <d2d1_1.h>
-
-namespace mozilla {
-namespace gfx {
-
-class DrawTargetD2D1;
-
-class SourceSurfaceD2D1 : public SourceSurface {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(SourceSurfaceD2D1, override)
-
- SourceSurfaceD2D1(ID2D1Image* aImage, ID2D1DeviceContext* aDC,
- SurfaceFormat aFormat, const IntSize& aSize,
- DrawTargetD2D1* aDT = nullptr);
- ~SourceSurfaceD2D1();
-
- SurfaceType GetType() const override { return SurfaceType::D2D1_1_IMAGE; }
- IntSize GetSize() const override { return mSize; }
- SurfaceFormat GetFormat() const override { return mFormat; }
- bool IsValid() const override;
- already_AddRefed<DataSourceSurface> GetDataSurface() override;
-
- ID2D1Image* GetImage() { return mImage; }
-
- void EnsureIndependent() {
- if (!mDrawTarget) return;
- DrawTargetWillChange();
- }
-
- private:
- friend class DrawTargetD2D1;
-
- bool EnsureRealizedBitmap();
-
- // This function is called by the draw target this texture belongs to when
- // it is about to be changed. The texture will be required to make a copy
- // of itself when this happens.
- void DrawTargetWillChange();
-
- // This will mark the surface as no longer depending on its drawtarget,
- // this may happen on destruction or copying.
- void MarkIndependent();
-
- RefPtr<ID2D1Image> mImage;
- // This may be null if we were created for a non-bitmap image and have not
- // had a reason yet to realize ourselves.
- RefPtr<ID2D1Bitmap1> mRealizedBitmap;
- RefPtr<ID2D1DeviceContext> mDC;
- // Keep this around to verify whether out image is still valid in the future.
- RefPtr<ID2D1Device> mDevice;
-
- const SurfaceFormat mFormat;
- const IntSize mSize;
- DrawTargetD2D1* mDrawTarget;
- std::shared_ptr<Mutex> mSnapshotLock;
- bool mOwnsCopy;
-};
-
-class DataSourceSurfaceD2D1 : public DataSourceSurface {
- public:
- MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(DataSourceSurfaceD2D1, override)
-
- DataSourceSurfaceD2D1(ID2D1Bitmap1* aMappableBitmap, SurfaceFormat aFormat);
- ~DataSourceSurfaceD2D1();
-
- SurfaceType GetType() const override { return SurfaceType::DATA; }
- IntSize GetSize() const override;
- SurfaceFormat GetFormat() const override { return mFormat; }
- bool IsValid() const override { return !!mBitmap; }
- uint8_t* GetData() override;
- int32_t Stride() override;
- bool Map(MapType, MappedSurface* aMappedSurface) override;
- void Unmap() override;
-
- private:
- friend class SourceSurfaceD2DTarget;
- void EnsureMapped();
-
- mutable RefPtr<ID2D1Bitmap1> mBitmap;
- SurfaceFormat mFormat;
- D2D1_MAPPED_RECT mMap;
- bool mIsMapped;
- bool mImplicitMapped;
-};
-
-} // namespace gfx
-} // namespace mozilla
-
-#endif /* MOZILLA_GFX_SOURCESURFACED2D2TARGET_H_ */
diff --git a/gfx/2d/Types.h b/gfx/2d/Types.h
@@ -26,14 +26,11 @@ typedef double Double;
enum class SurfaceType : int8_t {
DATA, /* Data surface - bitmap in memory */
- D2D1_BITMAP, /* Surface wrapping a ID2D1Bitmap */
- D2D1_DRAWTARGET, /* Surface made from a D2D draw target */
CAIRO, /* Surface wrapping a cairo surface */
CAIRO_IMAGE, /* Data surface wrapping a cairo image surface */
COREGRAPHICS_IMAGE, /* Surface wrapping a CoreGraphics Image */
COREGRAPHICS_CGCONTEXT, /* Surface wrapping a CG context */
SKIA, /* Surface wrapping a Skia bitmap */
- D2D1_1_IMAGE, /* A D2D 1.1 ID2D1Image SourceSurface */
RECORDING, /* Surface used for recording */
DATA_SHARED, /* Data surface using shared memory */
DATA_RECYCLING_SHARED, /* Data surface using shared memory */
@@ -766,11 +763,9 @@ enum class DrawTargetType : int8_t {
enum class BackendType : int8_t {
NONE = 0,
- DIRECT2D, // Used for version independent D2D objects.
CAIRO,
SKIA,
RECORDING,
- DIRECT2D1_1,
WEBRENDER_TEXT,
WEBGL,
@@ -877,9 +872,9 @@ MOZ_DEFINE_ENUM_CLASS_WITH_BASE(PatternType, int8_t, (
enum class JoinStyle : int8_t {
BEVEL,
ROUND,
- MITER, //!< Mitered if within the miter limit, else, if the backed supports
- //!< it (D2D), the miter is clamped. If the backend does not support
- //!< miter clamping the behavior is as for MITER_OR_BEVEL.
+ MITER, //!< Mitered if within the miter limit, else, if the backend supports
+ //!< it, the miter is clamped. If the backend does not support miter
+ //!< clamping the behavior is as for MITER_OR_BEVEL.
MITER_OR_BEVEL //!< Mitered if within the miter limit, else beveled.
};
diff --git a/gfx/2d/genshaders.sh b/gfx/2d/genshaders.sh
@@ -1,12 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-fxc ShadersD2D.fx -nologo -FhShadersD2D.h -Tfx_4_0 -Vn d2deffect
-fxc ShadersD2D1.hlsl -ESampleRadialGradientPS -nologo -Tps_4_0_level_9_3 -Fhtmpfile -VnSampleRadialGradientPS
-cat tmpfile > ShadersD2D1.h
-fxc ShadersD2D1.hlsl -ESampleRadialGradientA0PS -nologo -Tps_4_0_level_9_3 -Fhtmpfile -VnSampleRadialGradientA0PS
-cat tmpfile >> ShadersD2D1.h
-fxc ShadersD2D1.hlsl -ESampleConicGradientPS -nologo -Tps_4_0_level_9_3 -Fhtmpfile -VnSampleConicGradientPS
-cat tmpfile >> ShadersD2D1.h
-rm tmpfile
diff --git a/gfx/2d/gfx2d.vcxproj b/gfx/2d/gfx2d.vcxproj
@@ -83,15 +83,11 @@
<ClInclude Include="BaseRect.h" />
<ClInclude Include="BaseSize.h" />
<ClInclude Include="DrawEventRecorder.h" />
- <ClInclude Include="DrawTargetD2D.h" />
<ClInclude Include="DrawTargetDual.h" />
<ClInclude Include="DrawTargetRecording.h" />
- <ClInclude Include="GradientStopsD2D.h" />
- <ClInclude Include="HelpersD2D.h" />
<ClInclude Include="ImageScaling.h" />
<ClInclude Include="Logging.h" />
<ClInclude Include="Matrix.h" />
- <ClInclude Include="PathD2D.h" />
<ClInclude Include="PathHelpers.h" />
<ClInclude Include="PathRecording.h" />
<ClInclude Include="Point.h" />
@@ -100,8 +96,6 @@
<ClInclude Include="Rect.h" />
<ClInclude Include="ScaledFontBase.h" />
<ClInclude Include="ScaledFontDWrite.h" />
- <ClInclude Include="SourceSurfaceD2D.h" />
- <ClInclude Include="SourceSurfaceD2DTarget.h" />
<ClInclude Include="SourceSurfaceRawData.h" />
<ClInclude Include="Tools.h" />
<ClInclude Include="Types.h" />
@@ -109,29 +103,20 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="DrawEventRecorder.cpp" />
- <ClCompile Include="DrawTargetD2D.cpp" />
<ClCompile Include="DrawTargetDual.cpp" />
<ClCompile Include="DrawTargetRecording.cpp" />
<ClCompile Include="Factory.cpp" />
<ClCompile Include="ImageScaling.cpp" />
<ClCompile Include="ImageScalingSSE2.cpp" />
<ClCompile Include="Matrix.cpp" />
- <ClCompile Include="PathD2D.cpp" />
<ClCompile Include="PathRecording.cpp" />
<ClCompile Include="RecordedEvent.cpp" />
<ClCompile Include="ScaledFontBase.cpp" />
<ClCompile Include="ScaledFontDWrite.cpp" />
- <ClCompile Include="SourceSurfaceD2D.cpp" />
- <ClCompile Include="SourceSurfaceD2DTarget.cpp" />
<ClCompile Include="SourceSurfaceRawData.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="Makefile.in" />
- <CustomBuild Include="ShadersD2D.fx">
- <FileType>Document</FileType>
- <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fxc /Tfx_4_0 /FhShadersD2D.h ShadersD2D.fx /Vn d2deffect</Command>
- <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ShadersD2D.h</Outputs>
- </CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
diff --git a/gfx/2d/moz.build b/gfx/2d/moz.build
@@ -84,18 +84,11 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
"UnscaledFontGDI.h",
]
SOURCES += [
- "ConicGradientEffectD2D1.cpp",
- "DrawTargetD2D1.cpp",
"DWriteSettings.cpp",
- "ExtendInputEffectD2D1.cpp",
- "FilterNodeD2D1.cpp",
"NativeFontResourceDWrite.cpp",
"NativeFontResourceGDI.cpp",
- "PathD2D.cpp",
- "RadialGradientEffectD2D1.cpp",
"ScaledFontDWrite.cpp",
"ScaledFontWin.cpp",
- "SourceSurfaceD2D1.cpp",
]
DEFINES["WIN32"] = True
diff --git a/gfx/2d/unittest/Main.cpp b/gfx/2d/unittest/Main.cpp
@@ -8,9 +8,6 @@
#include "TestPoint.h"
#include "TestScaling.h"
#include "TestBugs.h"
-#ifdef WIN32
-# include "TestDrawTargetD2D.h"
-#endif
#include <string>
#include <sstream>
@@ -23,9 +20,6 @@ struct TestObject {
int main() {
TestObject tests[] = {
{new SanityChecks(), "Sanity Checks"},
-#ifdef WIN32
- {new TestDrawTargetD2D(), "DrawTarget (D2D)"},
-#endif
{new TestPoint(), "Point Tests"},
{new TestScaling(), "Scaling Tests"} {new TestBugs(), "Bug Tests"}};
diff --git a/gfx/2d/unittest/TestDrawTargetD2D.cpp b/gfx/2d/unittest/TestDrawTargetD2D.cpp
@@ -1,22 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "TestDrawTargetD2D.h"
-
-using namespace mozilla::gfx;
-TestDrawTargetD2D::TestDrawTargetD2D() {
- ::D3D10CreateDevice1(
- nullptr, D3D10_DRIVER_TYPE_HARDWARE, nullptr,
- D3D10_CREATE_DEVICE_BGRA_SUPPORT |
- D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS,
- D3D10_FEATURE_LEVEL_10_0, D3D10_1_SDK_VERSION, getter_AddRefs(mDevice));
-
- Factory::SetDirect3D10Device(mDevice);
-
- mDT = Factory::CreateDrawTarget(BackendType::DIRECT2D,
- IntSize(DT_WIDTH, DT_HEIGHT),
- SurfaceFormat::B8G8R8A8);
-}
diff --git a/gfx/2d/unittest/TestDrawTargetD2D.h b/gfx/2d/unittest/TestDrawTargetD2D.h
@@ -1,19 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#pragma once
-
-#include "TestDrawTargetBase.h"
-
-#include <d3d10_1.h>
-
-class TestDrawTargetD2D : public TestDrawTargetBase {
- public:
- TestDrawTargetD2D();
-
- private:
- RefPtr<ID3D10Device1> mDevice;
-};
diff --git a/gfx/2d/unittest/unittest.vcxproj b/gfx/2d/unittest/unittest.vcxproj
@@ -76,7 +76,6 @@
<ClCompile Include="SanityChecks.cpp" />
<ClCompile Include="TestBase.cpp" />
<ClCompile Include="TestDrawTargetBase.cpp" />
- <ClCompile Include="TestDrawTargetD2D.cpp" />
<ClCompile Include="TestPoint.cpp" />
<ClCompile Include="TestScaling.cpp" />
</ItemGroup>
@@ -84,11 +83,10 @@
<ClInclude Include="TestDrawTargetBase.h" />
<ClInclude Include="SanityChecks.h" />
<ClInclude Include="TestBase.h" />
- <ClInclude Include="TestDrawTargetD2D.h" />
<ClInclude Include="TestPoint.h" />
<ClInclude Include="TestScaling.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
-\ No newline at end of file
+</Project>
diff --git a/gfx/layers/client/TextureClient.cpp b/gfx/layers/client/TextureClient.cpp
@@ -287,18 +287,6 @@ static TextureType ChooseTextureType(gfx::SurfaceFormat aFormat,
BackendTypeForBackendSelector(layersBackend, aSelector);
(void)moz2DBackend;
-#ifdef XP_WIN
- int32_t maxTextureSize = aKnowsCompositor->GetMaxTextureSize();
- if ((layersBackend == LayersBackend::LAYERS_WR &&
- !aKnowsCompositor->UsingSoftwareWebRender()) &&
- (moz2DBackend == gfx::BackendType::DIRECT2D ||
- moz2DBackend == gfx::BackendType::DIRECT2D1_1) &&
- aSize.width <= maxTextureSize && aSize.height <= maxTextureSize &&
- !(aAllocFlags & (ALLOC_UPDATE_FROM_SURFACE | ALLOC_DO_NOT_ACCELERATE))) {
- return TextureType::D3D11;
- }
-#endif
-
#ifdef XP_MACOSX
if (StaticPrefs::gfx_use_iosurface_textures_AtStartup() &&
!aKnowsCompositor->UsingSoftwareWebRender()) {
@@ -1396,27 +1384,6 @@ already_AddRefed<TextureClient> TextureClient::CreateFromSurface(
return nullptr;
}
- TextureData* data = nullptr;
-#if defined(XP_WIN)
- LayersBackend layersBackend = aAllocator->GetCompositorBackendType();
- gfx::BackendType moz2DBackend =
- BackendTypeForBackendSelector(layersBackend, aSelector);
-
- int32_t maxTextureSize = aAllocator->GetMaxTextureSize();
-
- if (layersBackend == LayersBackend::LAYERS_WR &&
- (moz2DBackend == gfx::BackendType::DIRECT2D ||
- moz2DBackend == gfx::BackendType::DIRECT2D1_1) &&
- size.width <= maxTextureSize && size.height <= maxTextureSize) {
- data = D3D11TextureData::Create(aSurface, aAllocFlags);
- }
-#endif
-
- if (data) {
- return MakeAndAddRef<TextureClient>(data, aTextureFlags,
- aAllocator->GetTextureForwarder());
- }
-
// Fall back to using UpdateFromSurface
TextureAllocationFlags allocFlags =
@@ -1468,12 +1435,9 @@ already_AddRefed<TextureClient> TextureClient::CreateForRawBufferAccess(
aAllocFlags = TextureAllocationFlags(aAllocFlags | ALLOC_CLEAR_BUFFER);
}
- // Note that we ignore the backend type if we get here. It should only be D2D
- // or Skia, and D2D does not support data surfaces. Therefore it is safe to
- // force the buffer to be Skia.
- NS_WARNING_ASSERTION(aMoz2DBackend == gfx::BackendType::SKIA ||
- aMoz2DBackend == gfx::BackendType::DIRECT2D ||
- aMoz2DBackend == gfx::BackendType::DIRECT2D1_1,
+ // We ignore the backend type if we get here. It should only be Skia.
+ // Therefore it is safe to force the buffer to be Skia.
+ NS_WARNING_ASSERTION(aMoz2DBackend == gfx::BackendType::SKIA,
"Unsupported TextureClient backend type");
// For future changes, check aAllocFlags aAllocFlags & ALLOC_DO_NOT_ACCELERATE
diff --git a/gfx/layers/d3d11/TextureD3D11.cpp b/gfx/layers/d3d11/TextureD3D11.cpp
@@ -246,21 +246,14 @@ DataTextureSourceD3D11::~DataTextureSourceD3D11() {}
enum class SerializeWithMoz2D : bool { No, Yes };
template <typename T> // ID3D10Texture2D or ID3D11Texture2D
-static bool LockD3DTexture(
- T* aTexture, SerializeWithMoz2D aSerialize = SerializeWithMoz2D::No) {
+static bool LockD3DTexture(T* aTexture) {
MOZ_ASSERT(aTexture);
RefPtr<IDXGIKeyedMutex> mutex;
aTexture->QueryInterface((IDXGIKeyedMutex**)getter_AddRefs(mutex));
// Textures created by the DXVA decoders don't have a mutex for
// synchronization
if (mutex) {
- HRESULT hr;
- if (aSerialize == SerializeWithMoz2D::Yes) {
- AutoSerializeWithMoz2D serializeWithMoz2D(BackendType::DIRECT2D1_1);
- hr = mutex->AcquireSync(0, 10000);
- } else {
- hr = mutex->AcquireSync(0, 10000);
- }
+ HRESULT hr = mutex->AcquireSync(0, 10000);
if (hr == WAIT_TIMEOUT) {
RefPtr<ID3D11Device> device;
aTexture->GetDevice(getter_AddRefs(device));
@@ -293,19 +286,12 @@ static bool HasKeyedMutex(T* aTexture) {
}
template <typename T> // ID3D10Texture2D or ID3D11Texture2D
-static void UnlockD3DTexture(
- T* aTexture, SerializeWithMoz2D aSerialize = SerializeWithMoz2D::No) {
+static void UnlockD3DTexture(T* aTexture) {
MOZ_ASSERT(aTexture);
RefPtr<IDXGIKeyedMutex> mutex;
aTexture->QueryInterface((IDXGIKeyedMutex**)getter_AddRefs(mutex));
if (mutex) {
- HRESULT hr;
- if (aSerialize == SerializeWithMoz2D::Yes) {
- AutoSerializeWithMoz2D serializeWithMoz2D(BackendType::DIRECT2D1_1);
- hr = mutex->ReleaseSync(0);
- } else {
- hr = mutex->ReleaseSync(0);
- }
+ HRESULT hr = mutex->ReleaseSync(0);
if (FAILED(hr)) {
NS_WARNING("Failed to unlock the texture");
}
@@ -331,25 +317,7 @@ D3D11TextureData::D3D11TextureData(
MOZ_ASSERT(aTexture);
}
-static void DestroyDrawTarget(RefPtr<DrawTarget>& aDT,
- RefPtr<ID3D11Texture2D>& aTexture) {
- // An Azure DrawTarget needs to be locked when it gets nullptr'ed as this is
- // when it calls EndDraw. This EndDraw should not execute anything so it
- // shouldn't -really- need the lock but the debug layer chokes on this.
- LockD3DTexture(aTexture.get(), SerializeWithMoz2D::Yes);
- aDT = nullptr;
-
- // Do the serialization here, so we can hold it while destroying the texture.
- AutoSerializeWithMoz2D serializeWithMoz2D(BackendType::DIRECT2D1_1);
- UnlockD3DTexture(aTexture.get(), SerializeWithMoz2D::No);
- aTexture = nullptr;
-}
-
D3D11TextureData::~D3D11TextureData() {
- if (mDrawTarget) {
- DestroyDrawTarget(mDrawTarget, mTexture);
- }
-
if (mGpuProcessTextureId.isSome()) {
auto* textureMap = GpuProcessD3D11TextureMap::Get();
if (textureMap) {
@@ -377,39 +345,10 @@ bool D3D11TextureData::Lock(OpenMode aMode) {
fencesHolderMap->WaitAllFencesAndForget(mFencesHolderId.ref(), mDevice);
}
- if (mHasKeyedMutex &&
- !LockD3DTexture(mTexture.get(), SerializeWithMoz2D::Yes)) {
+ if (mHasKeyedMutex && !LockD3DTexture(mTexture.get())) {
return false;
}
- if (NS_IsMainThread()) {
- if (!PrepareDrawTargetInLock(aMode)) {
- Unlock();
- return false;
- }
- }
-
- return true;
-}
-
-bool D3D11TextureData::PrepareDrawTargetInLock(OpenMode aMode) {
- // Make sure that successful write-lock means we will have a DrawTarget to
- // write into.
- if (!mDrawTarget && (aMode & OpenMode::OPEN_WRITE || mNeedsClear)) {
- mDrawTarget = BorrowDrawTarget();
- if (!mDrawTarget) {
- return false;
- }
- }
-
- // Reset transform
- mDrawTarget->SetTransform(Matrix());
-
- if (mNeedsClear) {
- mDrawTarget->ClearRect(Rect(0, 0, mSize.width, mSize.height));
- mNeedsClear = false;
- }
-
return true;
}
@@ -421,14 +360,14 @@ void D3D11TextureData::Unlock() {
fencesHolderMap->SetWriteFence(mFencesHolderId.ref(), mWriteFence);
}
if (mHasKeyedMutex) {
- UnlockD3DTexture(mTexture.get(), SerializeWithMoz2D::Yes);
+ UnlockD3DTexture(mTexture.get());
}
}
void D3D11TextureData::FillInfo(TextureData::Info& aInfo) const {
aInfo.size = mSize;
aInfo.format = mFormat;
- aInfo.supportsMoz2D = true;
+ aInfo.supportsMoz2D = false;
aInfo.hasSynchronization = mHasKeyedMutex;
}
@@ -621,7 +560,6 @@ D3D11TextureData* D3D11TextureData::Create(IntSize aSize, SurfaceFormat aFormat,
RefPtr<ID3D11Texture2D> texture11;
{
- AutoSerializeWithMoz2D serializeWithMoz2D(BackendType::DIRECT2D1_1);
D3D11MTAutoEnter lock(mt.forget());
HRESULT hr = device->CreateTexture2D(&newDesc, uploadDataPtr,
@@ -644,10 +582,10 @@ D3D11TextureData* D3D11TextureData::Create(IntSize aSize, SurfaceFormat aFormat,
// aSurface then bizarely this isn't covered, so we insert a manual
// lock/unlock pair to force this.
if (aSurface && useKeyedMutex) {
- if (!LockD3DTexture(texture11.get(), SerializeWithMoz2D::Yes)) {
+ if (!LockD3DTexture(texture11.get())) {
return nullptr;
}
- UnlockD3DTexture(texture11.get(), SerializeWithMoz2D::Yes);
+ UnlockD3DTexture(texture11.get());
}
RefPtr<IDXGIResource1> resource;
@@ -701,7 +639,6 @@ D3D11TextureData* D3D11TextureData::Create(IntSize aSize, SurfaceFormat aFormat,
}
void D3D11TextureData::Deallocate(LayersIPCChannel* aAllocator) {
- mDrawTarget = nullptr;
mTexture = nullptr;
}
@@ -917,17 +854,8 @@ already_AddRefed<TextureHost> CreateTextureHostD3D11(
already_AddRefed<DrawTarget> D3D11TextureData::BorrowDrawTarget() {
MOZ_ASSERT(NS_IsMainThread() || NS_IsInCanvasThreadOrWorker());
-
- if (!mDrawTarget && mTexture) {
- // This may return a null DrawTarget
- mDrawTarget = Factory::CreateDrawTargetForD3D11Texture(mTexture, mFormat);
- if (!mDrawTarget) {
- gfxCriticalNote << "Could not borrow DrawTarget (D3D11) " << (int)mFormat;
- }
- }
-
- RefPtr<DrawTarget> result = mDrawTarget;
- return result.forget();
+ gfxCriticalNote << "Could not borrow DrawTarget (D3D11) " << (int)mFormat;
+ return nullptr;
}
bool D3D11TextureData::UpdateFromSurface(gfx::SourceSurface* aSurface) {
@@ -1098,190 +1026,7 @@ already_AddRefed<gfx::DataSourceSurface>
DXGITextureHostD3D11::GetAsSurfaceWithDevice(
ID3D11Device* const aDevice,
DataMutex<RefPtr<VideoProcessorD3D11>>& aVideoProcessorD3D11) {
- if (!aDevice) {
- return nullptr;
- }
-
- RefPtr<ID3D11Texture2D> d3dTexture = OpenSharedD3D11Texture(this, aDevice);
- if (!d3dTexture) {
- return nullptr;
- }
-
- RefPtr<ID3D11Device> device;
- d3dTexture->GetDevice(getter_AddRefs(device));
- if (!device) {
- gfxCriticalNoteOnce << "Failed to get D3D11 device from source texture";
- return nullptr;
- }
-
- if (mFencesHolderId.isSome()) {
- auto* fencesHolderMap = layers::CompositeProcessD3D11FencesHolderMap::Get();
- MOZ_ASSERT(fencesHolderMap);
- if (!fencesHolderMap) {
- return nullptr;
- }
- fencesHolderMap->WaitWriteFence(mFencesHolderId.ref(), device);
- } else {
- bool isLocked = LockD3DTexture(d3dTexture.get());
- if (!isLocked) {
- return nullptr;
- }
- }
-
- const auto onExit = mozilla::MakeScopeExit([&]() {
- if (mFencesHolderId.isSome()) {
- return;
- }
- UnlockD3DTexture(d3dTexture.get());
- });
-
- bool isRGB = [&]() {
- switch (mFormat) {
- case gfx::SurfaceFormat::R8G8B8X8:
- case gfx::SurfaceFormat::R8G8B8A8:
- case gfx::SurfaceFormat::B8G8R8A8:
- case gfx::SurfaceFormat::B8G8R8X8:
- return true;
- default:
- break;
- }
- return false;
- }();
-
- if (isRGB) {
- RefPtr<gfx::DrawTarget> dt =
- gfx::Factory::CreateDrawTargetForD3D11Texture(d3dTexture, mFormat);
- if (!dt) {
- return nullptr;
- }
- RefPtr<gfx::SourceSurface> surface = dt->Snapshot();
- if (!surface) {
- return nullptr;
- }
- RefPtr<DataSourceSurface> dataSurface = surface->GetDataSurface();
- if (!dataSurface) {
- return nullptr;
- }
- return dataSurface.forget();
- }
-
- if (mFormat != gfx::SurfaceFormat::NV12 &&
- mFormat != gfx::SurfaceFormat::P010 &&
- mFormat != gfx::SurfaceFormat::P016) {
- MOZ_ASSERT_UNREACHABLE("unexpected to be called");
- return nullptr;
- }
-
- RefPtr<ID3D11DeviceContext> context;
- device->GetImmediateContext(getter_AddRefs(context));
-
- CD3D11_TEXTURE2D_DESC desc;
- d3dTexture->GetDesc(&desc);
-
- desc = CD3D11_TEXTURE2D_DESC(
- DXGI_FORMAT_B8G8R8A8_UNORM, desc.Width, desc.Height, 1, 1,
- D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE);
- desc.MiscFlags =
- D3D11_RESOURCE_MISC_SHARED_NTHANDLE | D3D11_RESOURCE_MISC_SHARED;
-
- RefPtr<ID3D11Texture2D> copiedTexture;
- HRESULT hr =
- device->CreateTexture2D(&desc, nullptr, getter_AddRefs(copiedTexture));
- if (FAILED(hr)) {
- gfxCriticalNoteOnce << "Failed to create copiedTexture: " << gfx::hexa(hr);
- return nullptr;
- }
-
- {
- auto lock = aVideoProcessorD3D11.Lock();
- auto& videoProcessor = lock.ref();
- if (videoProcessor && (videoProcessor->mDevice != device)) {
- videoProcessor = nullptr;
- }
-
- if (!videoProcessor) {
- videoProcessor = VideoProcessorD3D11::Create(device);
- if (!videoProcessor) {
- gfxCriticalNoteOnce << "Failed to create VideoProcessorD3D11";
- return nullptr;
- }
- }
-
- hr = videoProcessor->Init(mSize);
- if (FAILED(hr)) {
- gfxCriticalNoteOnce << "Failed to init VideoProcessorD3D11"
- << gfx::hexa(hr);
- return nullptr;
- }
-
- VideoProcessorD3D11::InputTextureInfo info(mColorSpace, mColorRange,
- mArrayIndex, d3dTexture);
- if (!videoProcessor->CallVideoProcessorBlt(info, copiedTexture)) {
- gfxCriticalNoteOnce << "CallVideoProcessorBlt failed";
- return nullptr;
- }
- }
-
- {
- // Wait VideoProcessorBlt gpu task complete.
- RefPtr<ID3D11Query> query;
- CD3D11_QUERY_DESC desc(D3D11_QUERY_EVENT);
- hr = device->CreateQuery(&desc, getter_AddRefs(query));
- if (FAILED(hr) || !query) {
- gfxWarning() << "Could not create D3D11_QUERY_EVENT: " << gfx::hexa(hr);
- return nullptr;
- }
-
- context->End(query);
-
- BOOL result;
- bool ret = WaitForFrameGPUQuery(device, context, query, &result);
- if (!ret) {
- gfxCriticalNoteOnce << "WaitForFrameGPUQuery() failed";
- }
- }
-
- RefPtr<IDXGIResource1> resource;
- copiedTexture->QueryInterface((IDXGIResource1**)getter_AddRefs(resource));
- if (!resource) {
- gfxCriticalNoteOnce << "Failed to get IDXGIResource";
- return nullptr;
- }
-
- HANDLE sharedHandle;
- hr = resource->CreateSharedHandle(
- nullptr, DXGI_SHARED_RESOURCE_READ | DXGI_SHARED_RESOURCE_WRITE, nullptr,
- &sharedHandle);
- if (FAILED(hr)) {
- gfxCriticalNoteOnce << "GetSharedHandle failed: " << gfx::hexa(hr);
- return nullptr;
- }
-
- RefPtr<gfx::FileHandleWrapper> handle =
- new gfx::FileHandleWrapper(UniqueFileHandle(sharedHandle));
-
- d3dTexture = OpenSharedD3D11Texture(aDevice, handle->GetHandle());
- if (!d3dTexture) {
- gfxCriticalNoteOnce << "Failed to open copied texture handle";
- return nullptr;
- }
-
- RefPtr<gfx::DrawTarget> dt = gfx::Factory::CreateDrawTargetForD3D11Texture(
- d3dTexture, gfx::SurfaceFormat::B8G8R8A8);
- if (!dt) {
- gfxCriticalNote << "Failed to create DrawTarget (D3D11)";
- return nullptr;
- }
- RefPtr<gfx::SourceSurface> surface = dt->Snapshot();
- if (!surface) {
- return nullptr;
- }
- RefPtr<DataSourceSurface> dataSurface = surface->GetDataSurface();
- if (!dataSurface) {
- return nullptr;
- }
-
- return dataSurface.forget();
+ return nullptr;
}
void DXGITextureHostD3D11::CreateRenderTexture(
diff --git a/gfx/layers/d3d11/TextureD3D11.h b/gfx/layers/d3d11/TextureD3D11.h
@@ -135,8 +135,6 @@ class D3D11TextureData final : public TextureData {
const RefPtr<FenceD3D11> aWriteFence,
TextureAllocationFlags aFlags);
- bool PrepareDrawTargetInLock(OpenMode aMode);
-
friend class gl::GLBlitHelper;
bool SerializeSpecific(SurfaceDescriptorD3D10* aOutDesc);
@@ -146,10 +144,6 @@ class D3D11TextureData final : public TextureData {
TextureAllocationFlags aAllocFlags,
ID3D11Device* aDevice = nullptr);
- // Hold on to the DrawTarget because it is expensive to create one each
- // ::Lock.
- RefPtr<gfx::DrawTarget> mDrawTarget;
-
public:
const gfx::IntSize mSize;
const gfx::SurfaceFormat mFormat;
diff --git a/gfx/layers/ipc/CanvasTranslator.cpp b/gfx/layers/ipc/CanvasTranslator.cpp
@@ -931,7 +931,6 @@ void CanvasTranslator::Flush() {
return;
}
- gfx::AutoSerializeWithMoz2D serializeWithMoz2D(mBackendType);
RefPtr<ID3D11DeviceContext> deviceContext;
mDevice->GetImmediateContext(getter_AddRefs(deviceContext));
deviceContext->Flush();
diff --git a/gfx/thebes/gfxContext.h b/gfx/thebes/gfxContext.h
@@ -171,9 +171,7 @@ class gfxContext final {
*/
void SetPath(Path* path) {
MOZ_ASSERT(path->GetBackendType() == mDT->GetBackendType() ||
- path->GetBackendType() == BackendType::RECORDING ||
- (mDT->GetBackendType() == BackendType::DIRECT2D1_1 &&
- path->GetBackendType() == BackendType::DIRECT2D));
+ path->GetBackendType() == BackendType::RECORDING);
mPath = path;
mPathBuilder = nullptr;
mPathIsRect = false;
diff --git a/gfx/thebes/gfxPlatform.cpp b/gfx/thebes/gfxPlatform.cpp
@@ -1241,8 +1241,7 @@ bool gfxPlatform::UseRemoteCanvas() {
/* static */
bool gfxPlatform::IsBackendAccelerated(
const mozilla::gfx::BackendType aBackendType) {
- return aBackendType == BackendType::DIRECT2D ||
- aBackendType == BackendType::DIRECT2D1_1;
+ return false;
}
/* static */
@@ -1955,17 +1954,8 @@ void gfxPlatform::InitBackendPrefs(BackendPrefsData&& aPrefsData) {
mPreferredCanvasBackend = aPrefsData.mCanvasDefault;
}
- if (mPreferredCanvasBackend == BackendType::DIRECT2D1_1) {
- // Falling back to D2D 1.0 won't help us here. When D2D 1.1 DT creation
- // fails it means the surface was too big or there's something wrong with
- // the device. D2D 1.0 will encounter a similar situation.
- mFallbackCanvasBackend = GetCanvasBackendPref(
- aPrefsData.mCanvasBitmask & ~(BackendTypeBit(mPreferredCanvasBackend) |
- BackendTypeBit(BackendType::DIRECT2D)));
- } else {
- mFallbackCanvasBackend = GetCanvasBackendPref(
- aPrefsData.mCanvasBitmask & ~BackendTypeBit(mPreferredCanvasBackend));
- }
+ mFallbackCanvasBackend = GetCanvasBackendPref(
+ aPrefsData.mCanvasBitmask & ~BackendTypeBit(mPreferredCanvasBackend));
mContentBackendBitmask = aPrefsData.mContentBitmask;
mContentBackend = GetContentBackendPref(mContentBackendBitmask);
@@ -3950,8 +3940,7 @@ bool gfxPlatform::FallbackFromAcceleration(FeatureStatus aStatus,
return true;
}
- // We aren't using Software WebRender + D3D11 compositing, so turn off the
- // D3D11.
+ // We aren't using Software WebRender + D3D11 compositing, so turn off D3D11.
if (gfxConfig::IsEnabled(Feature::D3D11_COMPOSITING)) {
gfxConfig::GetFeature(Feature::D3D11_COMPOSITING)
.ForceDisable(aStatus, aMessage, aFailureId);
diff --git a/gfx/thebes/gfxPlatform.h b/gfx/thebes/gfxPlatform.h
@@ -135,16 +135,12 @@ const uint32_t kMaxLenPrefLangList = 32;
inline const char* GetBackendName(mozilla::gfx::BackendType aBackend) {
switch (aBackend) {
- case mozilla::gfx::BackendType::DIRECT2D:
- return "direct2d";
case mozilla::gfx::BackendType::CAIRO:
return "cairo";
case mozilla::gfx::BackendType::SKIA:
return "skia";
case mozilla::gfx::BackendType::RECORDING:
return "recording";
- case mozilla::gfx::BackendType::DIRECT2D1_1:
- return "direct2d 1.1";
case mozilla::gfx::BackendType::WEBRENDER_TEXT:
return "webrender text";
case mozilla::gfx::BackendType::NONE:
diff --git a/gfx/thebes/gfxUtils.cpp b/gfx/thebes/gfxUtils.cpp
@@ -266,69 +266,6 @@ void gfxUtils::ConvertBGRAtoRGBA(uint8_t* aData, uint32_t aLength) {
SurfaceFormat::R8G8B8A8, IntSize(aLength / 4, 1));
}
-#if !defined(MOZ_GFX_OPTIMIZE_MOBILE)
-/**
- * This returns the fastest operator to use for solid surfaces which have no
- * alpha channel or their alpha channel is uniformly opaque.
- * This differs per render mode.
- */
-static CompositionOp OptimalFillOp() { return CompositionOp::OP_SOURCE; }
-
-// EXTEND_PAD won't help us here; we have to create a temporary surface to hold
-// the subimage of pixels we're allowed to sample.
-static already_AddRefed<gfxDrawable> CreateSamplingRestrictedDrawable(
- gfxDrawable* aDrawable, gfxContext* aContext, const ImageRegion& aRegion,
- const SurfaceFormat aFormat, bool aUseOptimalFillOp) {
- AUTO_PROFILER_LABEL("CreateSamplingRestrictedDrawable", GRAPHICS);
-
- DrawTarget* destDrawTarget = aContext->GetDrawTarget();
- // We've been not using CreateSamplingRestrictedDrawable in a bunch of places
- // for a while. Let's disable it everywhere and confirm that it's ok to get
- // rid of.
- if (destDrawTarget->GetBackendType() == BackendType::DIRECT2D1_1 || (true)) {
- return nullptr;
- }
-
- gfxRect clipExtents = aContext->GetClipExtents();
-
- // Inflate by one pixel because bilinear filtering will sample at most
- // one pixel beyond the computed image pixel coordinate.
- clipExtents.Inflate(1.0);
-
- gfxRect needed = aRegion.IntersectAndRestrict(clipExtents);
- needed.RoundOut();
-
- // if 'needed' is empty, nothing will be drawn since aFill
- // must be entirely outside the clip region, so it doesn't
- // matter what we do here, but we should avoid trying to
- // create a zero-size surface.
- if (needed.IsEmpty()) return nullptr;
-
- IntSize size(int32_t(needed.Width()), int32_t(needed.Height()));
-
- RefPtr<DrawTarget> target =
- gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(size,
- aFormat);
- if (!target || !target->IsValid()) {
- return nullptr;
- }
-
- gfxContext tmpCtx(target);
-
- if (aUseOptimalFillOp) {
- tmpCtx.SetOp(OptimalFillOp());
- }
- aDrawable->Draw(&tmpCtx, needed - needed.TopLeft(), ExtendMode::REPEAT,
- SamplingFilter::LINEAR, 1.0,
- gfxMatrix::Translation(needed.TopLeft()));
- RefPtr<SourceSurface> surface = target->Snapshot();
-
- RefPtr<gfxDrawable> drawable = new gfxSurfaceDrawable(
- surface, size, gfxMatrix::Translation(-needed.TopLeft()));
- return drawable.forget();
-}
-#endif // !MOZ_GFX_OPTIMIZE_MOBILE
-
/* These heuristics are based on
* Source/WebCore/platform/graphics/skia/ImageSkia.cpp:computeResamplingMode()
*/
@@ -503,8 +440,7 @@ void gfxUtils::DrawPixelSnapped(gfxContext* aContext, gfxDrawable* aDrawable,
const ImageRegion& aRegion,
const SurfaceFormat aFormat,
SamplingFilter aSamplingFilter,
- uint32_t aImageFlags, gfxFloat aOpacity,
- bool aUseOptimalFillOp) {
+ uint32_t aImageFlags, gfxFloat aOpacity) {
AUTO_PROFILER_LABEL("gfxUtils::DrawPixelSnapped", GRAPHICS);
gfxRect imageRect(gfxPoint(0, 0), aImageSize);
@@ -540,22 +476,6 @@ void gfxUtils::DrawPixelSnapped(gfxContext* aContext, gfxDrawable* aDrawable,
return;
}
#endif
-
- // On Mobile, we don't ever want to do this; it has the potential for
- // allocating very large temporary surfaces, especially since we'll
- // do full-page snapshots often (see bug 749426).
-#if !defined(MOZ_GFX_OPTIMIZE_MOBILE)
- RefPtr<gfxDrawable> restrictedDrawable = CreateSamplingRestrictedDrawable(
- aDrawable, aContext, aRegion, aFormat, aUseOptimalFillOp);
- if (restrictedDrawable) {
- drawable.swap(restrictedDrawable);
-
- // We no longer need to tile: Either we never needed to, or we already
- // filled a surface with the tiled pattern; this surface can now be
- // drawn without tiling.
- extendMode = ExtendMode::CLAMP;
- }
-#endif
}
}
diff --git a/gfx/thebes/gfxUtils.h b/gfx/thebes/gfxUtils.h
@@ -109,8 +109,7 @@ class gfxUtils {
const mozilla::gfx::SurfaceFormat aFormat,
mozilla::gfx::SamplingFilter aSamplingFilter,
uint32_t aImageFlags = imgIContainer::FLAG_NONE,
- gfxFloat aOpacity = 1.0,
- bool aUseOptimalFillOp = true);
+ gfxFloat aOpacity = 1.0);
/**
* Clip aContext to the region aRegion.
diff --git a/image/VectorImage.cpp b/image/VectorImage.cpp
@@ -1330,12 +1330,6 @@ already_AddRefed<SourceSurface> VectorImage::CreateSurface(
aParams.context ? aParams.context->GetDrawTarget()->GetBackendType()
: gfxPlatform::GetPlatform()->GetDefaultContentBackend();
- if (backend == BackendType::DIRECT2D1_1) {
- // We don't want to draw arbitrary content with D2D anymore
- // because it doesn't support PushLayerWithBlend so switch to skia
- backend = BackendType::SKIA;
- }
-
// Try to create an imgFrame, initializing the surface it contains by drawing
// our gfxDrawable into it. (We use FILTER_NEAREST since we never scale here.)
auto frame = MakeNotNull<RefPtr<imgFrame>>();
@@ -1426,7 +1420,7 @@ void VectorImage::Show(gfxDrawable* aDrawable,
gfxUtils::DrawPixelSnapped(aParams.context, aDrawable,
SizeDouble(aParams.size), region,
SurfaceFormat::OS_RGBA, aParams.samplingFilter,
- aParams.flags, aParams.opacity, false);
+ aParams.flags, aParams.opacity);
AutoProfilerImagePaintMarker PROFILER_RAII(this);
#ifdef DEBUG